前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运维 | 在企业环境中快速安装配置 FreeBSD Unix 服务器操作系统

运维 | 在企业环境中快速安装配置 FreeBSD Unix 服务器操作系统

作者头像
全栈工程师修炼指南
发布2024-03-25 10:31:51
1730
发布2024-03-25 10:31:51
举报
0x01 Unix 服务器系统 FreeBSD Unix

FreeBSD 是什么?

描述: FreeBSD 是一种用于为现代服务器、台式机和嵌入式平台供电的操作系统; 三十多年来,一个大型社区不断发展它; 其先进的网络、安全和存储功能使FreeBSD成为许多最繁忙的网站和最普遍的嵌入式网络和存储设备的操作系统,官网地址:www.freebsd.org

weiyigeek.top-FreeBSD项目官网图

目前 FreeBSD 分支版本以及生命周期支持时间?

Branch

Release

Release Date

Expected EoL

stable/14

n/a

n/a

November 30, 2028

releng/14.0

14.0-RELEASE

November 20, 2023

14.1-RELEASE + 3 months

stable/13

n/a

n/a

January 31, 2026

releng/13.2

13.2-RELEASE

April 11, 2023

13.3-RELEASE + 3 months

由上可知,目前 FreeBSD 生命周期内的版本有 14.0、13.3、13.2,通常学习测试可以采用最新的,而生产环境中选择最稳定的。

选择 FreeBSD Unix 发行版还是其它 Linux 发行版?

FreeBSD 和 众多的 Linux (例如,Rocky)都是开源的操作系统,也是大家常常所听说的两种常见的操作系统。那么这两种系统有什么区别,各自的优缺点是什么呢?此小节将会对这两种操作系统进行对比并进行分析。Linux 发行版:

  • 优势:开源用户可以自由地修改操作系统中的代码,成熟稳定可靠的操作系统,自动调整内存分配,安全性相较于 Windows 稍高,但是由于其开源性质更可能被发现脆弱性漏洞。
  • 缺点:设备驱动程序需要经过维护和修复以适应新的硬件和支持用户的需求,系统更新频繁容易导致软硬件不兼容,组件独立使用不同的库和可执行二进制文件。

FreeBSD (Unix)发行版:

  • 优势:性能要更高于Linux,提供很高的数据吞吐量和可靠的稳定性、提供完整的协议栈从而可以处理网络协议的通信和标准化过程、拥有众多的用户与参与者。
  • 缺点:应用支持性(生态环境)有所欠缺部分软件并不能完美匹配,更新相对滞后且更新过程繁琐,由于Unix系统所以存在限制性商业协议,导致并非完全自由。

总得来说,Linux 和 FreeBSD都具有其各自的优缺点,例如,Linux系统是可以自由的,整体性良好,稳定性高,而且用法很广泛;而FreeBSD拥有较好的网络特性,可以获得高性能的处理能力,不过其在应用程序的支持性还是有一些不足。选择使用那种操作系统,将根据项目的特性和使用它的目的来选择一个合适的系统。

温馨提示:作者受限于自身能力、知识、经验,此处只是简单介绍实践 FreeBSD (Unix) 系统的安装配置,由于作者在看实际工作中常对 RedHat、CentOS、Ubuntu、KylinOS、Windows Server 等服务器操作系统运维,很少针对 FreeBSD Unix 服务器进行操作,不过思想是一致,某些软件目录与配置与Linux有相通之处,若想详细学习请参考官网文档。

快速部署

Step 1.访问 FreeBSD 官网下载地址 https://www.freebsd.org/where/ ,作为用户可自行根据安装环境及需求(平台架构、ISOs镜像类型),选择各种安装映像来安装 FreeBSD UNIX发行版。

weiyigeek.top-FreeBSD 官网下载界面图

  • Architecture: 平台架构
    • amd64i386:适用于64位、32位的平台架构CPU及操作系统(常见于个人主机、服务器等)
    • aarch64 (ARM64) :适用于嵌入式、微端(树莓派,机械臂,机械中控)
    • powerpcpowerpc64powerpc64lepowerpcspe:专用于IBM Power 系列服务器。
    • armv7 :是ARM公司的一种32位指令集架构,广泛应用于嵌入式系统、移动设备和低功耗服务器等领域
    • riscv64 : 适用于使用精简指令集(RISC)的主机系统, 其中64位版本被称为RISC-V 64位。
  • Images:镜像类型
    • ISO:适用于光盘安装以及USB刻录安装,其格式包括CD(disc1,可看做最小化安装包)、DVD(dvd1,全量安装包)和网络安装(仅引导)最小化镜像的ISO。
    • VM:适用于虚拟机环境下,使用虚拟磁盘映像安装FreeBSD操作系统。
    • SD Card:适用于嵌入式环境下系统的安装方式。

例如,作者为了方便大家学习FreeBSD操作系统的安装步骤,选择下载最新 amd64 架构 FreeBSD 14.0-RELEASE 精简镜像版本(1GB左右)进行部署( https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.0/FreeBSD-14.0-RELEASE-amd64-disc1.iso ),而不是直接是虚拟映像文件,当然若你只是为了简单的试用一下 FreeBSD 操作系统,则建议下载并使用VM虚拟映像方式安装。

weiyigeek.top-FreeBSDISO镜像下载图

Step 2.打开 VMware Workstations 软件,首先新建虚拟机(Ctrl+N),设置步骤大致如下,选择【自定义(高级)】-> 选择【安装程序光盘映像文件】即,前面下载的最小化安装包 -> 设置【虚拟机名称以及存储位置】-> 设置【CPU处理器为一块】、【运行内存为1GB】、【磁盘容量 100G】-> 最后点击完成,如下图所示:

  • CPU 处理器:任何主流的 x86、AMD64 或 ARM 处理器,至少一个。
  • Memeroy 内存:最小为128MB,为了系统体验建议设置 256MB 内存以上。
  • Disk 磁盘:最小为20GB,可根据业务需要自行设置。

weiyigeek.top-虚拟机资源设置图

Step 3.点击【完成】后回到虚拟机界面,选择【编辑虚拟机设置】-> 【选项卡】-> 点击【高级】-> 将引导模式设置为【UEFI】,由于UEFI模式相比较于BIOS模式较新,更安全,所以作者通过会选择UEFI模式进行系统的引导,当然选择BIOS传统引导页没有问题。

weiyigeek.top-更改虚拟机引导模式为UEFI图

Step 4.点击【开启此虚拟机】-> 进入到FreeBSD安装界面,选择【Boot Installer】回车即可 -> 选择【默认的 keymap】回车即可。

weiyigeek.top-FreeBSD安装界面图

Step 5.设置 FreeBSD 系统主机名称、选择系统组件(System Components)、系统磁盘分区,此处选择 Manual【手动分区】回车 -> 设置分区为 GPT -> 添加 / 根分区 -> 设置容量为 98GB -> 选择【ok】-> 然后 /boot/efi 分区将会自动创建,此处处于学习使用并未单独划分 data数据分区、home 用户分区、swap分区 以及 、var 分区,若有需求添加分区流程也是上述重复即可,相信各位看友都懂得举一反三吧!

weiyigeek.top-FreeBSD系统名称与分区设置图

Step 6.点击【Finish】和 Commit 完成后,则会将更改写入到磁盘,并安装内核到系统磁盘中,等待全部【Done】后,进行 root 账户密码的设置,之后选择网卡并进行网络配置,这里为了后续演示设置静态IP暂时选择DHCP(自动获取),设置 DNS 与搜索域,设置时区时间,最后选择启用常见的服务,例如 sshd(安全Shell守护进程)、dumpdev(内核崩溃记录服务)。

weiyigeek.top-FreeBSD用户即网络设置设置图

Step 7.然后会询问是否添加用户(Add User Accounts)来新创建普通账户,可根据需要进行跳过或者创建新用户,最后选择【Exit】保存配置并退出安装,在显示【Complete】界面,点击【Reboot】即可重启系统。

weiyigeek.top-完成FreeBSD部署安装图

Step 8.重启系统后,使用前面的root账号密码进行登录,然后启用 root 远程登录权限(若为生产服务器则不建议,开启 root 用户远程终端登录),修改/etc/ssh/sshd_config 配置文件,设置 PermitRootLogin yes ,然后重启sshd服务 service sshd restart

如何查看 FreeBSD 版本信息? 下面是该命令执行的输出样例:

代码语言:javascript
复制
$ freebsd-version -k
  # 14.0-RELEASE
$ uname -mrs
  # FreeBSD 14.0-RELEASE amd64

weiyigeek.top-图

至此,FreeBSD Unix 操作系统在虚拟机环境中搭建部署完毕,下面继续跟随作者来进行系统的常规配置吧!

附上,安装 FreeBSD 视频教程:

快速配置

1.主机名称修改

使用命令或者配置文件的方式,快速设置系统主机名称。

代码语言:javascript
复制
# 永久生效(注意:FreeBSD 是没有 /etc/hostname 文件)
hostname freebsd-server

# 添加硬解析
tee -a /etc/hosts <<'EOF'
# 新增一条硬解析记录
127.0.0.1 freebsd-server
EOF

# 测试配置
ping -c 1 freebsd-server

2.主机网络配置

在 FreeBSD 14上配置网络、DNS 服务器以及静态路由。

代码语言:javascript
复制
# 0.查看系统网络接口(即:网卡名称)
ifconfig | grep "flag" | cut -f 1 -d ":"
em0
lo0

# 1.打开终端并以root权限登录系统,使用 ee 命令编辑网络配置文件/etc/rc.conf
ee /etc/rc.conf

# DHCP (即:自动获取)
ifconfig_em0="DHCP"
ifconfig_em0_ipv6="inet6 accept_rtadv"

# STATIC (即:静态IP)
ifconfig_em0="inet 192.168.228.130 netmask 255.255.255.0"
defaultrouter="192.168.228.2"
ifconfig_em0_ipv6="inet6 fe80::20c:29ff:fe12:4c4e%em0 prefixlen 64"
ipv6_defaultrouter="fe80::%em0/64"

# 2.按ESE,选择两次A则保存并关闭/etc/rc.conf文件。

# 3.重启网络服务以使更改生效。
service netif restart

# 4.验证网络接口以及检查网络接口配置
ifconfig em0
netstat -rn          # IPV4/IPV6 路由表
netstat -rn -f inet6 # IPV6 路由表

# 5.编辑 DNS 配置 /etc/resolv.conf 文件
tee /etc/resolv.conf <<'EOF'
search localdomain
# 内部搭建的DNS服务器
nameserver 192.168.10.254
nameserver 223.6.6.6
EOF

weiyigeek.top-主机网络配置图

温馨提示:若想快速为企业搭建一个内部私有DNS服务器,可以选择 bind9 或者 CoreDNS 工具,恰好这两种方式作者实践过,有兴趣的看友可以参考下述两篇文章。

3.主机镜像pkg源配置

描述: FreeBSD 中pkg源(提供二进制安装包)分为系统级用户级两个源,前者是在/etc/pkg/FreeBSD.conf文件中配置,但是不建议直接修改, 因为该文件会随着基本系统的更新而发生改变。而后者需要自行创建目录文件,例如 /usr/local/etc/pkg/repos

代码语言:javascript
复制
# 系统级源目录:/etc/pkg/FreeBSD.conf
FreeBSD: {
  url: "pkg+http://pkg.FreeBSD.org/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

# 创建用户级源目录:
mkdir -p /usr/local/etc/pkg/repos
# 创建用户级源文件:
echo "FreeBSD: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf

# 设置国内清华大学、交通大学镜像源
tee  /usr/local/etc/pkg/repos/FreeBSD.conf <<'EOF'
FreeBSD: { enabled: no }
ustc: {
  url: "http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/quarterly",
  mirror_type: "none",
  signature_type: "none",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
bjtu: {
  url: "pkg+http://mirror.bjtu.edu.cn/reverse/freebsd-pkg/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "none",
  fingerprints: "/usr/share/keys/pkg",
  enabled: no
}
EOF

温馨提示: 若要获取滚动更新的包, 请将quarterly修改为latest, 请注意 CURRENT 版本只有 latest 。温馨提示: 若要使用https, 请先安装 security/ca_root_nss, 并将 http 修改为 https, 最后使用命令pkg update -f刷新缓存即可.

除此,之外我们也可以针对 ports源、portsnap源 以及 freebsd-update源 进行替换为国内镜像源。

代码语言:javascript
复制
# freebsd-update 源:提供基本系统更新
sed -i 's#update.FreeBSD.org#mirror.bjtu.edu.cn#g' /etc/freebsd-update.conf
# 例如,从FreeBSD 11升级到12.0命令示例,freebsd-update -r 12.0-RELEASE upgrade

# ports源:提供源码方式安装软件的包管理器
tee -a /etc/make.conf <<'EOF'
MASTER_SITE_OVERRIDE?=http://mirror.bjtu.edu.cn/reverse/freebsd-pkg/ports-distfiles/
EOF

# portsnap源:打包的ports文件
sed -i 's#portsnap.FreeBSD.org#mirror.bjtu.edu.cn#g' /etc/portsnap.conf
# 例如,获取portsnap更新命令,portsnap fetch extract

FreeBSD 国内镜像源使用文档:https://debian.bjtu.edu.cn/help/freebsd/

4.主机常用软件安装及更新

描述: 配置完国内镜像源后,便可进行系统及软件的安装更新操作了。

代码语言:javascript
复制
# 获取镜像源更新缓存
pkg update
pkg upgrade -y

# 搜寻软件包
pkg search unzip
unzip-6.0_8   List, test, and extract compressed files from a ZIP archive

# 安装常用软件工具包
# 源码编译工具,动态连接库命令:-Wl,-rpath=/usr/local/lib/gcc12
pkg install gcc make cmake
# FreeBSD 14 最小安装,默认自带 unzip、gzip 命令,若没有请自行安装,注意系统源中不带 tar 命令此处使用 xtar 命令替代tar来查看解压即可。
pkg install -y vim wget curl zip unzip unrar xtar gzip dos2unix jq bash-completion 
#  delv, dig, host, nslookup 等命令集安装
pkg install -y bind-tools
# 瑞士军刀 ncat 可用于网络测试
pkg install -y nc
# 更好的 top 工具,列举出进程资源占用信息
pkg install -y htop
# lsof 列出了有关进程信息
pkg install -y lsof
# tree 以树形结构显示文件及目录
pkg install -y tree
# pstree 以树形结构显示进程及子进程(读取的是 /proc 目录中的文件)
pkg install -y psmisc
# ncdu 磁盘使用情况
pkg install -y ncdu 
# chrony 客户端工具安装(ftp 、nfs 已自带)
pkg install -y chrony

温馨提示:若 FreeBSD 系统中 pkg 与 ports 源中没有的软件,请自行下载源码进行编译构架。

如何升级FreeBSD系统到14.x

假若,当前安装的版本是 FreeBSD 12.3-RELEASE,在升级到下一个可用的主版本前需要下载和安装FreeBSD安全补丁,请以root 用户身份运行以下命令:

代码语言:javascript
复制
freebsd-update fetch
freebsd-update install
pkg upgrade

升级软件包后,可以选用下面两个命令中的一个来重新启动系统:

代码语言:javascript
复制
shutdown -r now
reboot

运行以下命令将系统从 FreeBSD 13.2版本升级到 FreeBSD 14.0-RELEASE:

代码语言:javascript
复制
freebsd-update -r 14.10-RELEASE upgrade

执行上面的命令后,将会开始下载所有需要的安装包,这个过程将需要几分钟时间,具体时间取决于您的网络速度和FreeBSD系统上安装的软件包数量。

代码语言:javascript
复制
pkg-static install -f pkg
pkg bootstrap -f
pkg update
pkg upgrade -y

之后按照其提示,然后开始使用升级后的FreeBSD了。

5.主机时区时间同步配置

描述:FreeBSD 系统中自带了 ntpd 服务用于时间同步(默认未配置使用),而作者推荐使用chronyd作为时间同步服务(在上一步已经安装好了),遂下述实践以chrony为例,不过在此之前先看看时间时区的设置吧。

代码语言:javascript
复制
# 查看系统时间、时区
date -R
Mon, 18 Mar 2024 14:22:40 +0800

# 方式1.若 CST-8 值不为 +0800 (亚洲-中国-北京)进行选择即可,执行如下命令,将会出现一个交互式菜单,让你选择地理区域和时区。根据提示选择正确的地区和时区。
tzsetup

# 方式2.使用配置文件方式配置时区(通用性好)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

时间同步服务快速配置步骤:

代码语言:javascript
复制
# 1.chrony 配置文件修改 /usr/local/etc/chrony.conf , 操作前请备份。
cp -a /usr/local/etc/chrony.conf  /usr/local/etc/chrony.conf.baK
tee /usr/local/etc/chrony.conf  <<'EOF'
# 四种注释方式
# a comment
% a comment
! a comment
; a comment

# NTP 上游服务器或者NTP池(必要设置)
server 192.168.10.254 iburst
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
# pool 0.freebsd.pool.ntp.org iburst

# NTP 日志服务
logdir /var/log/chrony

# 设置当测量历史记录过于不稳定时,为了避免对计算机的增益/损耗补偿进行更改,前者外网环境设定值,后者内网环境设定值。
maxupdateskew 100
! maxupdateskew 5

# 以百万分之一的单位存储计算机的时钟增益/损耗率,将计算机时钟的信息保存在文件中(必要设置)
driftfile /var/db/chrony/drift

# 允许客户端/服务器保存nts密钥和cookie,以减少密钥建立(NTS-KE会话)的数量
ntsdumpdir /var/db/chrony

# 指定 chronyd 进程运行pid文件
pidfile /var/run/chrony/chronyd.pid

# 确定当前TAI-UTC偏移量以及下一个闰秒何时发生
leapsectz right/UTC

# 初始化时钟校正
# 如果错误小于1秒,将通过加快或减慢计算机的时钟逐渐消除,直到它正确为止。如果错误超过1秒,将立即应用时间跳跃进行更正,值“3”表示仅在时钟的前三次更新中允许该步骤。
makestep 1.0 3
EOF

# 2.设置自启用 chronyd 服务,否则执行 service chronyd start 命令时将会报下述错误
# Cannot 'start' chronyd. Set chronyd_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.
# 追加配置字符串
tee -a /etc/rc.conf <<'EOF'
chronyd_enable="YES"
EOF
# 温馨提示:若不想设置自启动而启动服务的可直接执行:
service chronyd onstart

# 3.启动&查看长荣服务
service chronyd start && service chronyd status
  # Starting chronyd.
  # chronyd is running as pid 3193 3194.
# 查看进程占用文件资源信息
lsof -p 3194 

# 4.验证同步机制,此处使用 date 命令设置自定义时间。
date 202403181430.00
  # Mon Mar 18 14:30:00 CST 2024
# 手动触发时间同步 & 检查时间同步状态
chronyc makestep && chronyc tracking
# 若执行上述命令后时间仍然长时间不同步,则可以重启chronyd服务
service chronyd restart

温馨提示:FreeBSD Unix 系统与常见Linux发行版在软件安装后配置文件目录是有区别的,默认在 /usr/local/etc/ 目录中,但是这不是绝对的只是约定俗成的。

温馨提示:如果你希望系统时间与硬件时间同步,可以使用 adjkerntz -i 命令,除此之外你仍然能过使用ntpdate ntp.aliyun.com 命令进行同步。


亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?

入坑出坑

问题1.默认情况下执行pkg update命令时报pkg: No SRV record found for the repo 'FreeBSD'错误解决办法。

  • 错误信息:
代码语言:javascript
复制
# 默认配置
pkg -vv | grep -A 50 Repositories\:
Repositories:
  FreeBSD: {
    url             : "pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }

pkg update
  # Updating FreeBSD repository catalogue...
  # pkg: No SRV record found for the repo 'FreeBSD'

$ host -t SRV _http._tcp.pkg.FreeBSD.org 8.8.8.8
  # ;; connection timed out; no servers could be reached
  • 解决办法: 方法1.国内使用镜像源,并且将 conf 文件中的 mirror_type: "srv" 更改为 mirror_type: "none",以及将 url 字段中的 pkg+http 更改为 http; 方法2.查看内部DNS服务器是否存在异常不能解析的情况(作者,遇到的情况)。
代码语言:javascript
复制
# 设置镜像源
mkdir -p /usr/local/etc/pkg/repos
tee /usr/local/etc/pkg/repos/mirror-ustc.conf <<'EOF'
ustc: {
  url: "http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/quarterly",
  mirror_type: "none",
  signature_type: "none",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
FreeBSD: { enabled: no }
EOF

# 更新镜像源的元数据
pkg update -f

weiyigeek.top-镜像源更新图

参考地址:https://forums.freebsd.org/threads/pkg-no-srv-record-found-for-the-repo-freebsd.90716/

本文至此完毕,更多技术文章,请关注我获取及时文章推送!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈工程师修炼指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 快速部署
  • 快速配置
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档