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 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
Spis Treści
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
(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
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.