在现代化Linux版本上安装Firebird 3:CentOS 8和Ubuntu 19
(C) Basil Sidorov, IBSurgeon, 22-May-2020
本文致力于在新的 Linux 发行版:CentOS 8 和 Ubuntu 19(也适用于 18)上快速安装 Firebird 3.0。
第一部分是快速安装指南,用于尽可能快地安装 Firebird 3.0,不涉及细节。第二部分描述详细信息。
在 CentOS 8 和 Ubuntu 19 上快速安装 Firebird 3
- 向文件 /etc/sysctl.conf 添加以下行:
vm.max_map_count = 256000
- 保存 sysctl.conf 并应用新设置:
sudo sysctl -p /etc/sysctl.conf
接下来的说明在 CentOS 8 和 Ubuntu 19 上略有不同。
请注意,我们使用了来自 FirebirdSQL.org 的 Firebird 3.0 最新发布版的显式链接,目前(2020 年 5 月)是 3.0.5,以下是 64 位版本的链接:
https://github.com/FirebirdSQL/firebird/releases/download/R3.0.5/Firebird-3.0.5.33220-0.amd64.tar.gz
将来,当 3.0.6 等版本出现时,您需要使用新版本的正确链接–它将在 www.firebirdsql.org 上发布。
- 安装软件包
CentOS8
sudo yum -y install epel-release sudo yum -y makecache sudo yum -y install libicu libtommath tar sudo ln -s libncurses.so.6 /usr/lib64/libncurses.so.5 sudo ln -s libtommath.so.1 /usr/lib64/libtommath.so.0
sudo ln -s ln -s libncurses.so.5 /usr/lib64/libncurses.so.5
curl -L https://github.com/FirebirdSQL/firebird/releases/download/R3_0_5/Firebird-3.0.5.33220-0.amd64.tar.gz|tar -zxC /tmp
Ubuntu 19
sudo apt-get -y install libncurses5 libtommath1 sudo ln -s libtommath.so.1 /usr/lib/x86_64-linux-gnu/libtommath.so.0 wget -O- https://github.com/FirebirdSQL/firebird/releases/download/R3_0_5/Firebird-3.0.5.33220-0.amd64.tar.gz|tar -zxC /tmp
结果,您将在 /tmp/firebird 中获得所有 Firebird 安装文件:
/tmp/Firebird-3.0.5.33220-0.amd64# ll
total 8484
drwxr-xr-x 2 root root 4096 Jan 9 13:13 ./
drwxrwxrwt 28 root root 4096 May 22 17:20 ../
-rw-r--r-- 1 root root 8615663 Jan 9 13:13 buildroot.tar.gz
-rwxr-xr-x 1 root root 44096 Jan 9 13:13 install.sh*
-rw-r--r-- 1 root root 14967 Jan 9 13:13 manifest.txt
- 然后,安装 Firebird:
cd /tmp/Firebird-3.0.5.33220-0.amd64 sudo ./install.sh
然后,检查 Firebird 是否正在运行–下面的命令将显示所有与 Firebird 相关或以 firebird 用户身份运行的进程:
ps aux | grep firebird
如果您只需要安装 Firebird 3.0,这就是全部内容。
如果您想了解上述命令的含义,请继续阅读!
主要部分:在 Linux 上安装 Firebird 3 的详细信息
在本文中,我们假设操作系统是以最小版本安装的,并且您已经可以访问公共软件仓库或其本地副本。
规划空间分配
在用于服务 Firebird 数据库的服务器上,我们建议为临时文件(/tmp)、数据库文件和本地备份分配单独的卷。
临时文件卷
Firebird 临时文件包括锁文件、排序文件、用于“物化”全局临时表(GTT)的文件以及监控表。排序文件和 GTT 文件位于 /tmp 中,mon$- 和锁文件位于 /tmp/firebird 中。
排序文件在创建后立即被取消链接,因此您无法使用 ls 命令在文件夹中看到它们(与 Windows 不同)。
要查看这些文件,您需要请求 Firebird 进程的文件句柄(它们被标记为已删除):
sudo ls -lhF /proc/`pgrep firebird`/fd
要获取特定排序文件的详细信息,请运行命令
sudo stat -L /proc/`pgrep firebird`/fd/NUMBER
其中 NUMBER 是文件的文件描述符。
临时文件可能很大,因此建议为 /tmp 分配 20-30GB。
请注意,排序大小不取决于数据库大小:某些带有直接乘积的错误查询可以轻松地为 3MB 的数据库生成 100GB 的排序文件。
数据库文件卷
数据库文件卷应足够大,以容纳所有数据库文件,加上至少最大的数据库的大小,以便进行可能的就地操作。
此外,请记住数据库会随时间增长,并为它们预留一些可用空间。
强烈建议将数据库文件卷放在您拥有的最快驱动器/SAN/硬件上,具有最高的随机 IO 能力。
本地备份文件卷
本地备份文件卷应足够大,以容纳所有数据库的备份,加上最大的数据库文件的大小(不是备份–用于可能的测试恢复)。当然,还要记住数据库备份的增长。本地备份文件卷可以位于相对较慢的驱动器上。Firebird 备份文件具有线性结构,因此对于备份驱动器来说,具有较高的顺序速度就足够了。
准备
Firebird 引擎动态分配和释放内存,这可能导致内存碎片。
例如,在从 Firebird SuperServer 实例断开许多用户后可能会发生这种情况。内存碎片由系统参数 vm.max_map_count 控制,其默认值为 65K。建议将其增加至少 4 倍,并使此设置永久生效。
向 /etc/sysctl.conf 添加以下行:
vm.max_map_count = 256000
并应用它
sudo sysctl -p /etc/sysctl.conf
安装必要的软件包
Firebird 3 依赖于几个 Linux 软件包:ncurses、ICU、tommath。此外,我们还需要工具 gzip、tar 以及 curl 或 wget。
CentOS 8
CentOS 使用新的软件包管理器 dnf,它由 yum 透明地调用。我们喜欢 yum,所以让我们使用 yum。首先,更新元数据缓存:
sudo yum makecache
软件包 libtommath 位于单独的仓库 EPEL(E(xtra)P(ackages for)E(nterprise)L(inux))中,因此我们需要检查它是否已启用:
yum -C repolist
选项 -C(–cache-only)使 yum 仅使用缓存。
如果在 yum -C repolist 的结果中没有看到 epel-repository,请安装它:
sudo yum install epel-release && sudo yum makecache
如果出现问题,请编辑文件 /etc/yum.repos.d/epel.repo,将 https:// 替换为 http://,然后再次尝试 yum makecache。
然后,让我们检查是否拥有所有必要的软件包(示例中为 64 位):
yum -C list ncurses libicu libtommath gzip tar curl wget | grep -v i686
Installed Packages
curl.x86_64 7.61.1-11.el8 @anaconda
gzip.x86_64 1.9-9.el8 @anaconda
ncurses.x86_64 6.1-7.20180224.el8 @anaconda
Available Packages
libicu.x86_64 60.3-1.el8 BaseOS
libtommath.x86_64 1.1.0-1.el8 epel
tar.x86_64 2:1.30-4.el8 BaseOS
wget.x86_64 1.19.5-8.el8_1.1 AppStream
在 CentOS 8 上安装缺失的软件包
sudo yum install libicu libtommath tar
Ubuntu 19
apt list libncurses? libicu?? libtommath? gzip tar curl wget | grep -v i386
curl 7.65.3-1
gzip 1.10-0 [upgradable…]
libicu63 63.2-2 [installed]
libncurses5 6.1
libncurses6 6.1 [installed,automatic]
libtommath1 1.1.0
tar 1.30 [installed]
wget 1.20.3 [installed]
在 Ubuntu 19 上安装缺失的软件包:
sudo apt‑get install libncurses5 libtommath1
创建符号链接
Libtommath.so.1 和 libncurses.so.6 与 libtommath.so.0 和 libncurses.so.5 兼容,Firebird 只需为现有库版本创建符号链接即可。
首先,让我们找到 libtommath.so.1(libncurses.so.? 位于同一文件夹中):
find /usr -name libtommath.so.1
在 CentOS8 上,它位于:
/usr/lib64/libtommath.so.1
在 Ubuntu 19 上:
/usr/lib/x86_64-linux-gnu/libtommath.so.1
让我们创建符号链接
CentOS8
sudo ln -s libtommath.so.1 /usr/lib64/libtommath.so.0 sudo ln -s libncurses.so.6 /usr/lib64/libncurses.so.5
Ubuntu 19
sudo ln -s libtommath.so.1 /usr/lib/x86_64-linux-gnu/libtommath.so.0
要检查结果:
ls -lhF $(dirname `find /usr -name libtommath.so.1`) | grep "lib\(ncurses\|tommath\)\.so\."
在 CentOS8 上,它会给出:
libncurses.so.5 -> libncurses.so.6*
libncurses.so.6 -> libncurses.so.6.1*
libncurses.so.6.1*
libtommath.so.0 -> libtommath.so.1*
libtommath.so.1 -> libtommath.so.1.1.0*
libtommath.so.1.1.0*
在 Ubuntu 上,它会给出:
libncurses.so.5 -> libncurses.so.5.9
libncurses.so.5.9
libncurses.so.6 -> libncurses.so.6.1
libncurses.so.6.1
libtommath.so.0 -> libtommath.so.1
libtommath.so.1 -> libtommath.so.1.1.0
libtommath.so.1.1.0
获取 Firebird 3.0 发布版本
Firebird Linux 版本可在 www.firebirdsql.org 上以 tar.gz 压缩包的形式获取。假设 URL 是 Firebird 发布版 tar.gz 压缩包的下载链接。我们需要下载并解压该压缩包,为此可以使用 curl 或 wget。
curl
curl -L URL | tar -zxC /tmp
wget
wget -O- URL | tar -zxC /tmp
结果将创建文件夹 /tmp/Firebird‑3.0.5.33220‑0.amd64,其中包含 3 个文件:install.sh、buildroot.tar.gz 和 manifest.txt。
安装 Firebird
作为先决条件,我们已经设置了 vm.max_map_count,检查并安装了 ICU、ncurses 和 tommath,并创建了符号链接。
之后,最后一步很简单–运行
sudo ./install.sh
此脚本会启动系统单元 firebird-superserver,Firebird 即可开始工作。
配置文件及其优化
请注意,默认的 Firebird 配置文件 firebird.conf 的配置方式非常保守。您可以使用以下命令检查 firebird.conf 的内容(非注释行):
grep -v ^# firebird.conf | grep -v ^$
对于默认的 firebird.conf,上述命令将不返回任何内容,这意味着所有值均为默认值。
如果您正在配置生产系统,请考虑使用优化的 Firebird 配置文件:/zh/optimized-firebird-configuration/
常见问题解答 #1
常见的问题是“为什么不直接使用软件仓库,通过 yum 或 apt 安装 Firebird?”。当然,这是可能的,但有两大原因:
-
软件仓库可能包含旧版本(即,上一个次要版本),
-
我们喜欢控制环境,以确保所有内容都正确安装和配置。
此外,我们更倾向于安装到 /opt 目录,这更便于跨平台脚本编写,也是良好的管理实践。
联系方式
请随时将问题、建议和可能的错误发送至 [email protected]