Установка FreeBSD 9.0 на сервер Hetzner

Введение


Когда вышла FreeBSD 9.0, я задался целью установить данную систему на только что оформленный у «Hetzner» сервер. И хотя в открытую они не предлагают и не дают установить FreeBSD, однако, это вполне возможно сделать через Rescue System. Но, как выяснилось, так можно установить только FreeBSD 7.4 и FreeBSD 8.2.

После связи с службой поддержки «Hetzner» они ответили, что за дополнительную плату готовы вставить диск с данным программным обеспечением. Конечно это ни в бюджет ни в планы не входило.

В сети Интернет много советов по обновлению FreeBSD с версии 8 до версии 9, но они либо не полностью отражают суть проблемы, либо вообще ничего не позволяют обновить так как это нужно. Я потратил много времени, прежде чем мне удалось это сделать, поэтому я и решил написать данную статью, которая поможет сэкономить время.

Итак, приступим.

1. Установка версии FreeBSD от «Henzner»


Старт Rescue системы

Для начала нужно активировать Rescue System и зайти по ssh на сервер, как написано в инструкции у «Hetzner».

Для начала установки выполним следующую команду

# installimage


Затем укажем параметры и запустим установку. Вся установка занимает всего несколько минут в результате чего мы получаем следующее


Hetzner Online AG - installimage

Your server will be installed now, this will take some time

You can abort at any time with CTRL+C …

Deleting selected harddrive(s)… DONE

Creating a file system and extracting the image… DONE

Copying kernel… DONE

Configuring rc.conf… DONE

Configuring loader.conf… DONE

Enabling SSH login for root… DONE

Configuring resolv.conf… DONE

Congratulations! The configuration has been completed successfully.

You can now use 'reboot' to boot your newly installed FreeBSD system.


После установки перезагружаемся


# reboot


2 Настройка данных для обновления

Обновлять систему будем через sup. На мой взгляд, самый простой и правильный способ обновления системы.
sup входит в штатные средства операционной системы FreeBSD.

Переходим в каталог


# cd /usr/share/examples/cvsup/


Проверяем


# ls
 README           gnats-supfile    refuse.README    www-supfile
 cvs-supfile      ports-supfile    stable-supfile
 doc-supfile      refuse           standard-supfile


Теперь нужно указать новую версию операционной системы.
По умолчанию стоит текущая версия.

Выполняем копирование файла конфигурации


# cp standard-supfile standard-supfile-UPDATE_9


Отредактируем его


# ee standard-supfile-UPDATE_9

*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_9_0
*default delete use-rel-suffix
*default compress

src-all


Выполняем синхронизацию исходных кодов src, новой операционной системы


# /usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \


#? /usr/share/examples/cvsup/standard-supfile-UPDATE_9


После того как все файлы скопированы, нужно прочитать файл /usr/src/UPDATING (Чтобы небыло проблем)

Теперь нужно включить генерацию профилирующего кода (прописать NO_PROFILE=true в файле /etc/make.conf).

И там же нужно установить значение CFLAGS во -O2 -pipe.

-pipe позволяет компилятору использовать для связи вместо временных файлов программные каналы,
что уменьшает обращение к диску (за счет оперативной памяти).


# ee /etc/make.conf
NO_PROFILE=true
CFLAGS= -O2 -pipe


Также нужно добавить в make.conf строчку: KERNCONF=MYKERNEL, чтобы не писать при сборке и установке ядра


# make build kernel KERNCONF=MYKERNEL


а просто


# make build kernel


Отредактируем файл /etc/src.conf


# ee /etc/src.conf
WITHOUT_BLUETOOTH=TRUE
WITHOUT_GAMES=TRUE


Вообще конфиг make.conf можно дополнить многими параметрами, это зависит от того какие параметры компиляции Вам нужны.

Мой конфиг make.conf



CPUTYPE?=nocona
CFLAGS= -O2 -fno-strict-aliasing -pipe
# CXXFLAGS= -O2 -pipe # Осторожнее многие приложения могут не компилироваться если это прописать.
COPTFLAGS= -O2 -pipe -funroll-loops -ffast-math -fno-strict-aliasing
OPTIMIZED_CFLAGS=YES
KERNCONF=GARPIX
BUILD_OPTIMIZED=YES
WITH_CPUFLAGS=YES
WITHOUT_DEBUG=YES
WITH_OPTIMIZED_CFLAGS=YES
NO_PROFILE=YES
BUILD_STATIC=YES
WITHOUT_X11=YES
DWITH_SLANG=YES
DLLVM_HOSTTRIPLE="x86_64-garpix-freebsd9.0"
STRIP=
CFLAGS+=-fno-omit-frame-pointer
WITH_CTF=1
# added by use.perl 2012-02-07 19:02:35
PERL_VERSION=5.12.4



Получаем исходники ядра


# svn checkout svn://svn.freebsd.org/base/releng/9.0 /usr/src


Переходим в каталог с ядром


# cd /usr/src/sys/amd64/conf


Копируем конфиг с ядром в созданный за ранее каталог


# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
# ln -s /root/kernels/MYKERNEL


Теперь нужно провести конфигурацию ядра под Ваш компьютер
Подробнее об этом можно почитать на официальном сайте FreeBSD

Мой конфиг ядра



cpu			HAMMER
ident			MYKERNEL

makeoptions		DEBUG=-g					# Build kernel with gdb(1) debug symbols
makeoptions		WITH_CTF=1
makeoptions		MODULES_OVERRIDE="zfs opensolaris dtrace cyclic nfsclient krpc nfs_common nfslock"

options			SCHED_ULE					# ULE scheduler
options			PREEMPTION					# Enable kernel thread preemption
options			INET							# InterNETworking
options			INET6						# IPv6 communications protocols
options			IPFIREWALL					# Firewall IPFw
#options		IPFIREWALL_DEFAULT_TO_ACCEPT		# Accept to Firewall
options			IPFIREWALL_VERBOSE			# Enable Logs from Firewall
#options		IPFIREWALL_VERBOSE_LIMIT=10		# Limit logs from Firewall
options			DUMMYNET					# Speed Traffic to Firewall
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			NFSCL						# New Network Filesystem Client
options			NFSD						# New Network Filesystem Server
options			NFSLOCKD					# Network Lock Manager
options			NFS_ROOT					# NFS usable as /, requires NFSCL
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
options			AUDIT						# Security event auditing
options			MAC							# TrustedBSD MAC Framework
options			KDTRACE_FRAME				# Ensure frames are compiled in
options			KDTRACE_HOOKS				# Kernel DTrace hooks
options			DDB_CTF						# all architectures - kernel ELF linker loads CTF data
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			COMPAT_FREEBSD8				# Compatible with FreeBSD8
options			P1003_1B_SEMAPHORES			# POSIX-style semaphores
options			DEVICE_POLLING				# Polling Network Enabled

# Settings for max connections = 256options SEMMNI=512
options SEMMNS=1024
options SEMUME=64
options SEMMNU=512

# Make an SMP-capable kernel by default
options			SMP							# Symmetric MultiProcessor Kernel

# CPU frequency control
device			cpufreq

# Bus support.device			acpi
device			pci

# ATA controllers
device			ahci							# AHCI-compatible SATA controllers
device			ata							# Legacy ATA/SATA controllers
options			ATA_CAM						# Handle legacy controllers with CAM
options			ATA_STATIC_ID				# Static device numbering
device			mvs							# Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA
device			siis							# SiliconImage SiI3124/SiI3132/SiI3531 SATA

# ATA/SCSI peripherals
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							# SCSI Environmental Services (and SAF-TE)

# RAID controllers interfaced to the SCSI subsystem
device			hptrr							# Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx

# atkbdc0 controls both the keyboard and the PS/2 mouse
device			atkbdc						# AT keyboard controller
device			atkbd						# AT keyboard
device			psm							# PS/2 mouse

device			via							# VGA video card driver

# sys cons is the default console driver, resembling an SCO console
device			sc
options			SC_PIXEL_MODE						# add support for the raster text mode

# Serial (COM) ports
device			uart							# Generic UART driver

device			put							# Multi I/O cards and multi-channel UARTs

# PCI Ethernet NICs.
device			bxe							# Broadcom BCM57710/BCM57711/BCM57711E 10Gb Ethernet>
device			de							# DEC/Intel DC21x4x (``Tulip)>
device			em							# Intel PRO/1000 Gigabit Ethernet Family>
device			igb							# Intel PRO/1000 PCIE Server Gigabit Family>
device			ixgbe							# Intel PRO/10GbE PCIE Ethernet Family>
device			le							# AMD Am7900 LANCE and Am79C9xx PCnet>
device			ti							# Alteon Networks Tigon I/II gigabit Ethernet>
device			txp							# 3Com 3cR990 (``Typhoon)>
device			vx							# 3Com 3c590, 3c595 (``Vortex)>

# PCI Ethernet NICs that use the common MII bus controller code.>
# NOTE: Be sure to keep the 'device minibus' line in order to use these NICs!>
device			minibus						# MII bus support>
device			ae							# Attansic/Atheros L2 FastEthernet>
device			age							# Attansic/Atheros L1 Gigabit Ethernet>
device			alc							# Atheros AR8131/AR8132 Ethernet>
device			ale							# Atheros AR8121/AR8113/AR8114 Ethernet>
device			bce							# Broadcom BCM5706/BCM5708 Gigabit Ethernet>
device			bfe							# Broadcom BCM440x 10/100 Ethernet>
device			bge							# Broadcom BCM570xx Gigabit Ethernet>
device			dc							# DEC/Intel 21143 and various workalikes>
device			et							# Agere ET1310 10/100/Gigabit Ethernet>
device			fxp							# Intel EtherExpress PRO/100B (82557, 82558)>
device			jme							# JMicron JMC250 Gigabit/JMC260 Fast Ethernet>
device			leg							# Level 1 LXT1001 gigabit Ethernet>
device			msk							# Marvell/SysKonnect Yukon II Gigabit Ethernet>
device			nfe							# nVidia nForce MCP on-board Ethernet>
device			nge							# NatSemi DP83820 gigabit Ethernet>
device			pcn							# AMD Am79C97x PCI 10/100 (precedence over 'le')>
device			re							# RealTek 8139C+/8169/8169S/8110S>
device			rl							# RealTek 8129/8139>
device			sf							# Adaptec AIC-6915 (``Starfire)>
device			sge							# Silicon Integrated Systems SiS190/191>
device			sis							# Silicon Integrated Systems SiS 900/SiS 7016>
device			sk							# SysKonnect SK-984x & SK-982x gigabit Ethernet>
device			ste							# Sundance ST201 (D-Link DFE-550TX)>
device			stge							# Sundance/Tamarack TC9021 gigabit Ethernet>
device			tl							# Texas Instruments ThunderLAN>
device			tx							# SMC EtherPower II (83c170 ``EPIC)>
device			vge							# VIA VT612x gigabit Ethernet>
device			vr							# VIA Rhine, Rhine II>
device			wb							# Winbond W89C840F>
device			xl							# 3Com 3c90x (``Boomerang, ``Cyclone)>

# Pseudo devices.
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

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device			bpf							# Berkeley packet filter

# USB support
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			ulpt							# Printer
device			umass						# Disks/Mass storage - Requires scbus and da
device			ums							# Mouse



После того как ядро сконфигурировано, переходим в каталог с исходниками /usr/src


# cd /usr/src


Чуть не забыл, нужно добавить в свой конфиг ядра следующую опцию


options COMPAT_FREEBSD8 # Compatible with FreeBSD8


Теперь редактируем следующие файлы добавляя строки


# ee /usr/src/sys/conf/NOTES
# Enable FreeBSD8 compatibility syscalls
options			COMPAT_FREEBSD8
# ee /usr/src/sys/conf/options
COMPAT_FREEBSD8		opt_compat.h


Переходим к компиляции мира и ядра системы


# cd /usr/src
# make kernel-toolchain


ждем пока процесс не закончится

Теперь компилируем ядро


# make build kernel


Когда ядро скомпилировано, устанавливаем его


# make install kernel


Теперь нужно скомпилировать мир


# make build world


Мир компилируется очень долго, придется подождать

Смотрим вывод date и если вывод некорректный, то нужно обязательно прочитать статью

Теперь выполняем следующее


# adjkerntz -i
# cd /usr/src


Устанавливаем конфигурационные файлы


# mergemaster -a -p


Если появляются вопросы то всегда нужно нажимать i


i и [Enter]


Иногда нужно нажать d если других вариантов нет


d и [Enter]


i — Установить новые конфигурационные файлы
d — Удалить временные конфигурационные файлы

Теперь удаляем каталог rc.d


# rm -rf /etc/rc.d


Продолжаем устанавливать конфиги


# mergemaster -i -p
# mergemaster -p


Устанавливаем мир


# make install world


После того как мир установлен, копируем конфиги мира


# mergemaster -a
# mergemaster -i
# mergemaster


Выполнять нужно по очереди, не забывая про параметры i и d, вопросов будет много.

На этом все, новая система установлена но пока перезагружать компьютер нельзя

Меняем пароль у root пользователя


# passwd


Теперь нужно настроить SSH а то в систему будет не зайти

# ee /etc/ssh/sshd_config



PermitRootLogin yes


Проверяем все ли встало как надо


Всмысле какие демоны запущены? Читаем /etc/rc.conf, есть ли службы, которые запускаются альтернативными способами, можно узнать, посмотрев


# sockstat -l


Так же там же, в /etc/rc.conf, сетевые настройки


# less, tail, cat - чем нравится, тем и смотрите.


Содержимое /var/run/dmesg.boot расскажет всё об используемом железе


# pciconf -lv


Покажет всё железо, как используемое, так и не используемое


# atacontrol list


Выдаст список ATA устройств


# camcontrol devlist


Выдаст список USB устройств


# usbconfig list


Теперь устанавливаем временную зону


# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
# date


или


# setenv TZ Europe/Moscow-04:00
# date


Установка локали


По умолчанию в FreeBSD установлена кодировка koi8-r (на мой взгляд это прошлый век, меняем на utf-8)


#ee /etc/login.conf



russian|Russian Users Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:tc=default:



# cap_mkdb /etc/login.conf
# pw usermod -n $username -L russian


Дополнительно к вышеприведенному способу, можно прописать переменные в используемом shell


#ee /etc/csh.cshrc



setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8


Опционально, для тех кто любит bash


# ee /etc/profile



LANG="ru_RU.UTF-8"; export LANG
LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
LC_COLLATE="POSIX"; export LC_COLLATE
LC_ALL="ru_RU.UTF-8"; export LC_ALL



# ee /root/.cshrc



setenv LANG ru_RU.UTF-8
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8


Далее просто набираем в консоли


# setenv LANG ru_RU.UTF-8
# setenv LC_CTYPE ru_RU.UTF-8
# setenv LC_COLLATE POSIX
# setenv LC_ALL ru_RU.UTF-8


Прописываем параметры настроек в sysctl


# ee /etc/sysctl.conf


Внимание данные настройки для моего сервера, они зависят от многих параметров, железа компьютера, количества оперативной памяти, типа процессора, нагрузки на сервер и других тд и тп.



# $FreeBSD: src/etc/sysctl.conf,v 1.8.40.1.2.1 2011/11/11 04:20:22 kensmith Exp $
#
#  This file is read when going to multi-user and its contents piped thru
#  ``sysctl to adjust kernel values.  ``man 5 sysctl.conf for details.
#

# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
#security.bsd.see_other_uids=0

kern.ipc.shmall=2048000
kern.ipc.shmmax=4461780992
kern.ipc.semmap=16000

net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
# kern.ipc.nmbclusters=65536
kern.ipc.somaxconn=32768
kern.ipc.maxsockets=204800
kern.ipc.maxsockbuf=262144
kern.ipc.shm_use_phys=1
kern.maxfiles=256000
kern.maxfilesperproc=230400
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535
net.inet.ip.portrange.randomized=0
net.inet.tcp.maxtcptw=40960
net.inet.ip.intr_queue_maxlen=4096

net.inet.tcp.msl=40000
net.inet.tcp.finwait2_timeout=40000
net.inet.tcp.syncookies=1

# In Large Load sent ansver selective
net.inet.tcp.delayed_ack=0
net.inet.tcp.sack.enable=0
net.inet.tcp.msl=30000
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.fast_finwait2_recycle=1
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet.ip.fw.enable=1
net.inet.flowtable.enable=0
net.inet6.ip6.fw.enable=1
net.inet6.ip6.redirect=0
net.inet6.ip6.accept_rtadv=1
net.inet.tcp.sendspace=16384
net.inet.tcp.recvspace=8192
net.inet.tcp.recvbuf_auto=0
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.sendbuf_inc=8192
net.inet.tcp.sendbuf_max=131072
net.link.ether.inet.max_age=1200
net.inet.tcp.maxtcptw=102400
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.syncookies=1
net.isr.direct=0
kern.polling.enable=1
kern.polling.burst_max=1000
kern.polling.each_burst=50
net.inet.icmp.icmplim=100
net.inet.tcp.rfc3465=0

# Security Jail
security.jail.sysvipc_allowed=1
security.jail.allow_raw_sockets=1
security.jail.chflags_allowed=1
security.jail.set_hostname_allowed=1


Настраиваем bootLoader (Привожу пример своего конфига, повторюсь это для моего сервера и привожу ради примера)


# ee /boot/loader.conf





zfs_load="YES"
vfs.root.mountfrom="zfs:garpix/root"
vfs.zfs.zio.use_uma="0"

ahci_load="YES"
aio_load="YES"
geom_mirror_load="YES"
geom_stripe_load="YES"
geom_cache_load="YES"
geom_label_load="YES"
accf_http_load="YES"
accf_data_load="YES"
accf_dns_load="YES"
coretemp_load="YES"
if_em_load="YES"
verbose_loading="YES"
boot_verbose="YES"

vm.kmem_size_max="4G"
vm.kmem_size="4G"

# HPET Enable
kern.timecounter.hardware=HPET

# Dtrace
dtraceall_load="YES"

# Semafores
kern.ipc.semmni=1024
kern.ipc.semmns=2048
kern.ipc.semmnu=1024

kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.ipc.maxsockets=204800
kern.ipc.nmbclusters=204800
kern.ipc.nmbjumbop=192000
kern.ipc.somaxconn=8192
kern.ipc.shmmax=2147483648
kern.ipc.maxsockbuf=10485760
kern.ipc.nsfbufs=10240
kern.maxvnodes=200000
kern.ps_arg_cache_limit=4096

# TCP Steck
#net.inet.tcp.syncache.hashsize=1024
#net.inet.tcp.syncache.bucketlimit=100
#net.inet.tcp.syncache.cachelimit=65536
#net.inet.tcp.hostcache.cachelimit=1966080
#net.inet.tcp.tcbhashsize=32768

vm.pmap.shpgperproc=2048
vm.pmap.pg_ps_enabled=1

hw.bge.allow_asf=1

loader_logo="MYLOGO"



Настройки RC.CONF


# ee /etc/rc.conf


Привожу для примера свой конфиг rc.conf (media 100BaseTX mediaopt full-duplex,flag0 зависят от датацентра «Hetzner»), это нужно уточнить у службы поддержки так как на другом сервере в другом датацентре у меня было media autoselect Также привожу настройки IPv6 от Hetzner, не буду подробно описывать это тема для отдельной статьи но по примеру можно сделать и будет работать.



hostname="garpix"
sshd_enable="YES"
sendmail_enable="YES"
zfs_enable="YES"

# IPv4 inet config
ntpd_enable="YES"
ifconfig_re0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx media 100BaseTX mediaopt full-duplex,flag0"
defaultrouter="xxx.xxx.xxx.xxx"

# IPv6 inet6 config
ipv6_network_interfaces="re0"
ifconfig_re0_ipv6="inet6 2a01:4f8:141:54c3::2 prefixlen 64 accept_rtadv"
ipv6_default_interface="re0"
ipv6_static_routes="gw defgw"
ipv6_route_gw="2a01:4f8:141:54c0:: -prefixlen 59 -iface re0"
ipv6_route_defgw="default 2a01:4f8:141:54c0::1"

# Firewall
firewall_enable="YES"
firewall_script="/etc/rc.ipfw"



Ну и самое важное, теперь нужно настроить Firewall


# ee /etc/rc.ipfw


RC.IPFW


#!/bin/sh
ipfw -q -f flush

oif="re0"
cmd="ipfw -q add "
ks="keep-state"

tcp_out="20,21,22,25,80,110,137,138,139,143,443,445,2802,3306,5190,6667,8080,9000"
tcp_in="20,21,22,80,443,8080,5432"
tcp6_in="::80,::443"
ftp_high="21,1024-65535"
udp_out="53,999,1234"
udp_in="1234"

# allow all
#$cmd 00100 pass all from any to any

# deny all
$cmd 00100 pass all from any to any via lo0
$cmd 00101 deny all from any to 127.0.0.0/8
$cmd 00102 deny all from 127.0.0.0/8 to any

$cmd 00500 check-state

$cmd 00502 deny all from any to any frag
$cmd 00501 deny tcp from any to any established
$cmd 00600 allow tcp from any to any out via $oif setup $ks
$cmd 00601 allow udp from any to any out via $oif $ks
# IPv6
$cmd 00701 allow ip6 from any to any $tcp6_in via $oif setup $ks
# tcp Out
$cmd 00702 skip to 10000 tcp from any to any $tcp_out out via $oif setup $ks
# Ftp
$cmd 00703 allow tcp from any to any via $oif established
$cmd 00704 allow tcp from me to any via $oif setup $ks
$cmd 00705 allow tcp from any to me $ftp_high via $oif setup $ks
$cmd 00706 skip to 10000 tcp from any to any $ftp_high out via $oif setup $ks
# Udp out
$cmd 00707 skip to 10000 udp from any to any $udp_out out via $oif $ks
# Udp in
$cmd 00708 skip to 10000 udp from any to any $udp_in in via $oif $ks
# tcp In
$cmd 00709 allow tcp from any to me $tcp_in in via $oif setup $ks
# ping
$cmd 02000 allow icmp from any to any icmptype 8
$cmd 02001 allow icmp from any to any icmptype 0
# IPv6
$cmd 02004 allow ipv6-icmp from any to any


Делаем скрипт выполняемым


# chmod 0755 /etc/rc.ipfw


Теперь перезагружаемся


# reboot


Если все сделано правильно то все должно работать как «часы»

Насчет всяких make delete-old и make delete-old-libs каждый решает для себя сам.

В моем конфиге ядра я прописал DTrace, если Вы сделали также то проверяем все ли работает


# trace -l | head


Правим make.conf для поддержки Dtrace на уровне пользователя


STRIP=
CFLAGS+=-fno-omit-frame-pointer


Теперь нужно установить порты

Получаем список портов


# portsnap fetch


Извлекаем порты


# portsnap extract


Переходим в каталог с портами и устанавливаем индекс


# cd /usr/ports
# make fetch index


Все готово, теперь система полностью рабочая, с портами и всем, что требуется для нормальной работы. Можно ставить приложения, которые Вам нужны, mc, ftp, nginx и т.д. и т.п.

P.S. Если нашли неточности или замечания, пишите – исправлю, материал набирал из гугла и с хабра, описал все подробно, чтобы можно было использовать как инструкцию. Конечно, многое тут элементарно, но некоторым пользователям это, я надеюсь, поможет сэкономить время.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 12

    0
    А почему нельзя накатить новую версию системы с помощью rsync и какой-нибудь виртуальной машины?
      +2
      Хм… у меня все без проблем обновилось через freebsd-update по FreeBSD handbook
      $ uname -a
      FreeBSD %hetzner% 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
        0
        Автор очевидно не ищет лёгких путей)
        0
        тоже задался вопросом почему не устроил freebsd-update
          0
          Потому, что GENERIC ядро это странная штука на сервере. Я первым делом вычищаю ядро от мусора.
            0
            Я тоже так думаю
          0
          А Вы внимательно читали статью? Или просто посмотрели что много всего написано?

          Все обновление системы занимает буквально пару строчек, все подробное описание здесь это компиляция ядра и настройка самой системы.

          И другие варианты все выше описанные я проверял и тот что описал единственно рабочий оказался, нет желания убеждать в обратном и что-то доказывать, если считаете, что другие методы лучше то значит пусть так и будет.

          Тем же кому статья оказалась полезна, если что-то не понятно то спрашивайте я объясню
            +1
            кто полез ssh на 176.9.11.211? :D
              0
              Вы считаете что зря раскрыл?
              0
              хорошая статья, и за живые конфиги спасибо.
              Я б еще рассказала про кастомную разбивку диска под свои нужды: удаленно делать не совсем тривиально, но у hetzner в вики есть немного.
              да, и живую систему по той же схеме обновлять можно — тоже так делаю.
                0
                Да, я много способов разных пробовал по обновлению, этот более удобный оказался и все под машину компилируется, в идеале конфиг ядра почистить надо чтобы вообще ничего лишнего небыло.
                0
                Есть ряд неточностей:
                1) svn по умолчанию не установлен в системе. Если конфикт при co то лечится вот так svn resolve --accept working
                2)не
                make build kernel
                правильно
                make buildkernel
                3) не
                make install kernel
                правильно
                make installkernel
                4)не make build world
                правильно make buildworld
                5) не make install world
                правильно make installworld
                6)Разрешать руту ходить по ssh не правильно и не безопасно, так же лучше ssh повесить на нестандартный порт.

                Only users with full accounts can post comments. Log in, please.