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 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
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
Odnośniki do dokumentacji
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

url4
Gdy trzeba dołączyć inną (pod)stronę https://moinmo.in/HelpOnMacros/Include https://moinmo.in/HelpOnParsers
Nieprawidłowe argumenty "pagename, heading, level, from="regex", to="regex", sort=ascending|descending, items=n, skipitems=n, titlesonly, editlink"!