FreeBSD 是A5推荐的 一款比Linux性能更高效的真Unix-like系统
曾经我以为运维是十分有趣的一件事,直到遇到了FreeBSD,它——让我感受到了痛苦。
硬件信息
升级系统
1、阿里云ECS 升级系统
在此之前 强烈建议先安装vim wget curl 这三个
pkg install -y vim wget curl
正常情况下 升级FreeBSD 其实很简单,耗时过程在于需要访问外网
而且国内没有什么好的update镜像站,所以一个命令可以睡一天。
只有两步:
详细情况统一说明一下
(为了让它看起来更像控制台的结果 以及方便我节选内容 我选择使用carbon code 展示 ):
freebsd-update 的镜像大陆的基本没有
最近的也就只有日本和台湾 而且也不全 ( 主要是freebsd官方不允许 )
所以如果忍不了巨慢的速度
可以先行使用freebsd.cn的镜像 速度很快 ( 至于觉得安全与否看个人了 )
vim /etc/freebsd-update.conf
将 ServerName update.FreeBSD.org
修改为 ServerName update.freebsd.cn
这样速度就会快很多
但是 如果你是阿里云的ECS
你可能需要打补丁 阿里云目前不少机器已经支持了 12.1
但是没有支持到12.2 所以需要自行升级 燃鹅 自行升级是有问题的,重启是绝对启动不起来
在执行 freebsd-update upgrade -r 12.2-RELEASE
以及 /usr/sbin/freebsd-update install
后千万不要重启!!!!
2、给阿里云的系统打补丁
需要进行以下操作
-
下载并解压FreeBSD内核源码。
wget https://mirrors.aliyun.com/freebsd/releases/amd64/12.2-RELEASE/src.txz -O /src.txz
cd /
tar -zxvf /src.txz
-
下载补丁包。
本示例中,为virtio驱动打补丁包0001-virtio.patch。
cd /usr/src/sys/dev/virtio/
wget `https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/0001-virtio.patch`
patch -p4 < 0001-virtio.patch
-
复制内核文件,并编译安装内核。
make -j<N> 表示指定编译时的并行数,需要根据您执行编译的环境配置来决定。
例如,1 vCPU环境建议设置-j2,即vCPU核数与变量N的比值为1:2。
buildworld的时候 不建议用较多的线程 会出现失败 剩下两个可以
cd /usr/src/
cp ./sys/amd64/conf/GENERIC .
make -j2 buildworld KERNCONF=GENERIC
make -j2 buildkernel KERNCONF=GENERIC
make -j2 installkernel KERNCONF=GENERIC
-
编译完成后,删除源码。
rm -rf /usr/src/*
rm -rf /usr/src/.*
-
最后reboot重启 自此阿里云的ECS升级就完成了
FreeBSD系统如何打补丁编译内核?
3、后续步骤
freebsd 更新并不会像自称unix-like的系统那样更新所有组件
它只更新内核 所以还需要自行使用pkg upgrade 进行升级组件
cloud-init
这里有个坑 你需要通过 pkg lock py37-cloud-init-20.3
至于名称的话 可以通过 pkg info | grep cloud-init
查询获得
不然新升级的cloud-init 20.4.1 会覆盖之前的Python文件
导致cloud-init启动和初始化报错
这样你也无法更新你的ssh密钥和hosts名称等信息
# 清空本机缓存信息
cloud-init clean
# 初始化
cloud-init init --local
cloud-init init
然后就可以下载从控制台绑定的密钥到本机了
( 最好把root里的.ssh中的authorized_keys清空一下 ,不然你会有很多以前的密钥可以登录
233333 等服务器自己重启更新实在是太慢了 反正我是没成功过的)
vim /etc/cloud/cloud.cfg
#注释掉以下两个 根本不指望cloud-init还能帮你重置磁盘分区 我更建议手动处理
# - growpart
# - resizefs
因为实际上是这么干的
# 查看磁盘信息 会显示出磁盘设备名称 例如 ada0
gpart show
gpart recover ada0
# 尝试修复,修改后剩余未分配容量显示正确 ( 一般也没啥可修复的)
gpart resize -i 3 ada0
# 扩展第3分区,将所有未分配容量加到第3分区里
# 一般看情况 gpt就通常是第三分区 mbr通常是第一分区 实际按显示的分区来
service growfs onestart # 启动 growfs 服务,自动完成扩展
ssh
建议更换默认的port端口
不然会被扫描攻击 ( 虽然阿里云默认通过密钥登录 而且 密码是随机生成的 )
vim /etc/ssh/sshd_config
以下内容为去掉# 额外的 // 为注释信息
Port 211 // 更改端口号
PasswordAuthentication yes // 验证权限
PermitEmptyPasswords no // 不允许空密码
PermitRootLogin yes // 允许root登录
vim /etc/inetd.conf 修改该文件 去掉ssh前面的#
否则会经常的出现ssh异常信息在vnc界面里
虽然在ssh控制台里没有
hosts
vim /etc/hosts
127.0.0.1 localhost
后面接上你的域名 以及本机ip后面也接上你购买的域名
当然 前提是得先解析上
MySql
有可能会出现以下情况 先按照其中的修改方案先执行 比较保险
===> Creating groups.
Creating group ‘mysql’ with gid ’88’.
===> Creating users
Creating user ‘mysql’ with uid ’88’.
pw: user ‘mysql’ disappeared during update
===> Creating homedir(s)
install: unknown user mysql
pkg: PRE-INSTALL script failed
出现该原因,是因为数据未同步,不止pkg安装,包括自己创建用户时,也可能会出现
_解决方案: /usr/sbin/pwd_mkdb -p /etc/master.passwd
_
安装错误 创建用户失败 PRE-INSTALL script failed
PHP
安装php7.4以及一些常见用得着的模块
pkg install -y php74-ctype-7.4.16 php74-filter-7.4.16 php74-gd-7.4.16 php74-iconv-7.4.16 php74-json-7.4.16 php74-mbstring-7.4.16 php74-mysqli-7.4.16 php74-openssl-7.4.16 php74-pdo-7.4.16 php74-pdo_mysql-7.4.16 php74-session-7.4.16 php74-xml-7.4.16 php74-zlib-7.4.16 php74-curl-7.4.16
sysrc php_fpm_enable=yes # 使php-fpm开机自启
# vim /usr/local/etc/php.ini
max_execution_time = 300 # 设置的脚本被解析器中止之前允许的最大执行时间
安装WordPress 可能会遇到504错误
在这里更新下 默认是30 单位是秒
自己按需给
然后启动php-fpm service php-fpm start
其实也可以不着急先启动
Nginx
安装Nginx
pkg install -y nginx
安装 certbot
pkg install py37-certbot
官方有两种方式 standalone 需要 先停止80端口的 Nginx
webroot不需要
certbot certonly --standalone
certbot certonly --webroot
以 standalone 为例 都可以接多个 但你需要先拥有域名 以及先解析到正确的ip
certbot certonly --standalone --email ident@mail.com -d domain.com -d www.domain.com -d abab.domain.com
不出意外 控制台会告诉你 把证书存储在
/usr/local/etc/letsencrypt/live/domain.com/
目录下 里面都是软连接
fullchain.pem
是总证书文件 privkey.pem
是key文件
如果你要换别的地方 可以直接复制这些软链接到其它位置
nginx 默认是www用户启动 空密码的 无法切换过去
所以 解压文件后 需要 chown -R www:www
将 解压的文件夹所有者变更为 www用户
真实的路径在 /usr/local/www/nginx-dist
剩下便是 /usr/local/etc/nginx/nginx.conf
的配置文件信息
同样的 还是放图片 以便好康一点点
关于监听多个域名我只是图方便 所以重复的比较多
但一定有更简洁的方式 我现在懒得写
另外如果要放开文件上传限制
不光nginx.conf
还有 php.ini
也需要 例如 upload_max_filesize = 10M
修改php-fpm 后 需要重启 php-fpm 和 nginx 只修改nginx不用