SpecialistOff.NET / Вопросы / Статьи / Фрагменты кода / Резюме / Метки / Помощь / Файлы

Список вопросов Печать

Сервер для офиса на FreeBSD


Метки: freebsd zfs межсетевой экран samba gpart zpool login.conf rc.conf fstab установка системы smb.conf 

Ответы

RemiZOffAlex  Создано: 2020-04-12 00:36:12.038954  Обновлено: 2020-04-12 00:36:12.038954

Оригинал статьи

В этом руководстве я пошагово расскажу как установить и сделать базовую настройку сервера для офиса, дома или других нужд.

На сервер будет возложены следующие функции:

  • Интернет-шлюз;
  • Хранилище файлов (в том числе и для 1С:Предприятие 8).

Требования:

  • Надежность;
  • Стабильность;
  • Низкая стоимость;
  • Малое энергопотребление;
  • «Поставил и забыл».

Затраты:

  • Покупка системного блока или использование существующего;
  • Флешка, содержащая загрузочный образ FreeBSD;
  • Время на установку и настройку.

Для нашего будущего сервера я использую собранную машину из следующих комплектующих, которые достаточно надежны в работе и недорогие:

  • Материнская плата GIGABYTE GA-J1900N-D3V;
  • Корпус mini-ITX с блоком питания на 250Вт;
  • Два жестких диска (желательно Toshiba или WD);
  • Два модуля памяти SODIMM DDR3, по 4 ГБ каждый (больше нет смысла, т.к. используемая материнская плата не поддерживает больше 8 ГБ в совокупности).

При первоначальной установке необходимо подключить монитор и клавиатуру к системному блоку будущего сервера. Вставляем флешку в USB разъем и запускаем ПК. При первой загрузке программа инсталлятор должна сама загрузиться и выдать окно с мастером установки. Мы будем делать это вручную.

В выведеном окне выбираем Shell

# - означает, что система готова к приему команд.

И вот здесь как раз и начинается магия. Команды придется забивать вручную. Конечно можно было бы воспользоваться мастером установки. Но в нём есть нюансы, которые я не буду описывать.

Для начала нам необходимо произвести разбивку диска на разделы. Применяемая мною схема GPT, отличается повышенной надежностью в отличие от стандартной схемы MBR. Создадим три раздела: загрузочный (код загрузчика системы), т.н. swap (раздел для хранения части оперативной памяти, которая временно не используется приложениями), основная файловая система ZFS.

ZFS выбрана не случайно. ZFS на сегодняшний момент является одной из самых лучших файловых систем. Для неё характерны высокая скорость, достаточная надежность при внештатном отключении питания с алгоритмом самовосстановления при наличии ошибок, большое количество создаваемых файлов и папок, возможность создания резервных копий системы «на лету».

Диск по умолчанию в системе определился как ada0.

# gpart create -s GPT ada0
# gpart add -s 128 -t freebsd-boot -l boot0 ada0
# gpart add -s 4G -t freebsd-swap -l swap0 ada0
# gpart add -t freebsd-zfs -l disk0 ada0
# gpart create -s GPT ada1
# gpart add -s 128 -t freebsd-boot -l boot1 ada1
# gpart add -s 4G -t freebsd-swap -l swap1 ada1
# gpart add -t freebsd-zfs -l disk1 ada1

Создаем пул с именем zfspool на разделе disk и подключаем к точке монтирования /tmp/mnt, которую создадим.

# mkdir /tmp/mnt
# zpool create -f -o altroot=/tmp/mnt zfspool raidz /dev/gpt/disk0 /dev/gpt/disk1
# zpool set bootfs=zfspool zfspool
# zfs set checksum=fletcher4 zfspool
# zfs set atime=off zfspool
# zfs set mountpoint=/tmp/mnt zfspool
# zpool export zfspool
# zpool import -o cachefile=/tmp/zpool.cache zfspool
# zfs create zfspool/var
# zfs create zfspool/var/db
# zfs create -o exec=off -o setuid=off zfspool/var/empty
# zfs set readonly=on zfspool/var/empty
# zfs create zfspool/var/tmp
# zfs create -o compression=gzip-9 zfspool/var/crash
# zfs create zfspool/tmp
# zfs create zfspool/usr
# zfs create -o compression=gzip-9 -o mountpoint=/tmp/mnt/usr/src zfspool/src
# zfs create -o compression=gzip-9 -o mountpoint=/tmp/mnt/usr/ports zfspool/ports
# zfs create -o mountpoint=/tmp/mnt/usr/ports/distfiles zfspool/distfiles
# zfs create -o mountpoint=/tmp/mnt/usr/home zfspool/home
# zfs create -o mountpoint=/tmp/mnt/usr/local zfspool/local
# zfs create -o mountpoint=/tmp/mnt/usr/obj zfspool/obj
# zfs create zfspool/data
# chmod 1777 /tmp/mnt/tmp /tmp/mnt/var/tmp
# cat /usr/freebsd-dist/base.txz | tar --unlink -xpJf - -C /tmp/mnt
# cat /usr/freebsd-dist/kernel.txz | tar --unlink -xpJf - -C /tmp/mnt
# gpart bootcode -b /tmp/mnt/boot/pmbr -p /tmp/mnt/boot/gptzfsboot -i 1 ada0

Вносим изменения в файл loader.conf

# cat << EOF > /tmp/mnt/boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:'zfspool'"
vm.kmem_size="1024M"
vm.kmem_size_max="1024M"
vfs.zfs.arc="512M"
vfs.zfs.arc_max="512M"
vfs.zfs.vdev.cache.size="10M"
vfs.zfs.prefetch_disable=1
EOF

Вносим изменения в файл rc.conf

# cat << EOF > /tmp/mnt/etc/rc.conf
# ZFS
zfs_enable="YES"
EOF

На этом этапе необходимо узнать у провайдера сетевые настройки. В этом примере я использовал стандартные настройки, которые не являются правильными, исключительно в целях примера. IP 10.0.0.2 MASK 255.255.0.0 DNS 10.0.0.1 Gateway 10.0.0.1

# echo '# Network' >> /tmp/mnt/etc/rc.conf
# echo 'ifconfig_em0="inet 192.168.0.1 netmask 255.255.255.0"' >> /tmp/mnt/etc/rc.conf
# echo 'ifconfig_em1="inet 10.0.0.2 netmask 255.255.0.0"' >> /tmp/mnt/etc/rc.conf
# echo 'defaultrouter="10.0.0.1"' >> /tmp/mnt/etc/rc.conf
# echo 'gateway_enable="YES"' >> /tmp/mnt/etc/rc.conf
# echo '' >> /tmp/mnt/etc/rc.conf
# echo '# Firewall' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_enable="YES"' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_type="OPEN"' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_simple_iif="em0"' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_simple_inet="192.168.0.0/24"' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_simple_oif="em1"' >> /tmp/mnt/etc/rc.conf
# echo 'firewall_simple_onet="10.0.0.0/16"' >> /tmp/mnt/etc/rc.conf
# echo '' >> /tmp/mnt/etc/rc.conf
# echo '# SSH' >> /tmp/mnt/etc/rc.conf
# echo 'sshd_enable="YES"' >> /tmp/mnt/etc/rc.conf

Вносим изменения в файл fstab

cat << EOF >> /tmp/mnt/etc/fstab
# Device	Mountpoint	FStype	Options	Dump	Pass#
/dev/gpt/swap0	none		swap	sw	0	0
/dev/gpt/swap1	none		swap	sw	0	0
proc		/proc		procfs	rw	0	0
devfs		/dev		devfs	rw	0	0
fdescfs		/dev/fd		fdescfs	rw	0	0
EOF

Вносим изменения в файл login.conf

# cat << EOF >> /tmp/mnt/etc/login.conf
# Russian UTF8
russian_utf8|Russian UTF-8 accounts:\
 :charset=UTF-8:\
 :lang=ru_RU.UTF-8:\
 :LC_ALL=ru_RU.UTF-8:\
 :tc=default:
EOF

Вносим изменения в файл profile

# echo 'LANG="ru_RU.UTF-8"; export LANG' >> /tmp/mnt/etc/profile
# echo 'LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE' >> /tmp/mnt/etc/profile
# echo 'LC_COLLATE="POSIX"; export LC_COLLATE' >> /tmp/mnt/etc/profile
# echo 'LC_ALL="ru_RU.UTF-8"; export LC_ALL' >> /tmp/mnt/etc/profile

Вносим изменения в файл csh.cshrc

# echo 'setenv LANG ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
# echo 'setenv LC_CTYPE ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
# echo 'setenv LC_COLLATE POSIX' >> /mnt/etc/csh.cshrc
# echo 'setenv LC_ALL ru_RU.UTF-8' >> /mnt/etc/csh.cshrc
# zfs unmount -a
# zfs set mountpoint=legacy zfspool
# zfs set mountpoint=/usr zfspool/usr
# zfs set mountpoint=/usr/home zfspool/home
# zfs set mountpoint=/usr/local zfspool/local
# zfs set mountpoint=/usr/obj zfspool/obj
# zfs set mountpoint=/usr/ports/distfiles zfspool/distfiles
# zfs set mountpoint=/usr/ports zfspool/ports
# zfs set mountpoint=/usr/src zfspool/src
# zfs set mountpoint=/var zfspool/var
# zfs set mountpoint=/tmp zfspool/tmp
# zfs set readonly=on zfspool/var/empty
# zfs set mountpoint=data zfspool/data
# shutdown -p now

После того, как компьютер выключился извлекаем флешку и запускаем нашу систему.

Для входа используем логин root и пустой пароль. Проверяем доступность интернет ресурсов:

# ping ya.ru

Если сеть настроена правильно и доступна, то продолжаем.

# cp -R /usr/share/examples/cvsup /usr/local/
# ee /usr/local/cvsup/ports-supfile

Здесь нам необходимо изменить строку *default host=CHANGE_THIS.FreeBSD.org на *default host=cvsup2.ru.FreeBSD.org. Сохраняем изменения и загружаем дерево портов:

# csup /usr/local/cvsup/ports-supfile
# make -C /usr/ports/ports-mgmt/portmaster/ install clean
# rehash
# portmaster net/samba36

Снять опцию: [  ] IPV6 With IPv6 support.

После установки и сборки добавляем пользователя в систему:

# pw useradd admin
# mkdir /home/admin/share/public
# chown nobody:nobody /home/admin/share/public
# ee /usr/local/etc/smb.conf

В секции [global] редактируем следующее

guest account = nobody
interfaces = 192.168.0.1/24
hosts allow = 192.168.0. 127.
server string = My First Server
security = share

[public]
	vfs objects = zfsacl
	browseable = no
	printable = no
	writable = yes
	only guest = yes
	public = yes
	path = /home/admin/share/public

Добавляем дополнительные настройки для нашего шлюза:

# echo 'samba_enable="YES"' >> /etc/rc.conf
# echo 'natd_enable="YES"' >> /etc/rc.conf
# echo 'natd_interface="em1"' >> /etc/rc.conf
# echo 'ipfw_load="YES"' >> /boot/loader.conf
# echo 'ipdivert_load="YES"' >> /boot/loader.conf
# echo 'firewall_type="SIMPLE"' >> /etc/rc.conf

И перезагрузиться.

Зайти на сервер можно даже из под OC Windows, для этого необходимо открыть Проводник и набрать в строке адреса \\192.168.0.1.

Примечание: в данном руководстве опущены некоторые детали, которые в разной степени могут повлиять на функционирование сервера.

Возможно будут интересны и другие вопросы