Wydrukuj tę dokumentację Pokaż jako slajdy
Spis Treści
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 11.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
COMMON11
Pełna konfiguracja (na podstawie serwerka domowego):
ident COMMON11
#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
options IMAGACT_BINMISC # enables application execution through emulators
options RACCT # Resource accounting framework
#options RACCT_DEFAULT_TO_DISABLED # Set kern.racct.enable=0 by default
options RCTL # Resource limits
HQ11x64
include COMMON11
ident HQ11x64
cpu HAMMER
machine amd64
device ada
device ahci
device ata
options COMPAT_FREEBSD32
options COMPAT_FREEBSD10
options COMPAT_43TTY
options COMPAT_LINUX32
# 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)"
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ł (/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 ... ***'
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
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
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
Skrypt aktualizacji FreeBSD z wykorzystaniem beadm
Opis założeń dla vt(4)
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

Jeżeli to pierwszy upgrade po instalacji z szablonu, to trzeba na chwilę skopiować pliki startowe sshd oraz local_unbound do partycji /root.