Linux에서 Firebird 3.0 및 4.0을 설치하는 방법
_by Vasily Sidorov, 2022년 8월 24일
이 글에서는 인기 있는 Linux 버전(CentOS 7, Oracle Linux 7/8, Debian 9/10, Ubuntu 18/20, OpenSUSE 15.0)에 Firebird 3 및 4 버전을 설치하는 방법을 설명합니다.
Linux용 Firebird 배포판을 얻으려면 공식 Firebird 웹 사이트의 tar 아카이브를 사용하세요:
- Firebird 4: https://firebirdsql.org/en/firebird-4-0/
- Firebird 3: https://firebirdsql.org/en/firebird-3-0/
설치는 root 또는 sudoer 권한으로 수행되며, Linux 컴퓨터가 인터넷에 연결되어 있다고 가정합니다.
일부 명령은 사용자 입력이 필요할 수 있습니다. 세미콜론(;)으로 끝나는 줄은 단일 라인 명령으로 실행할 수 있음을 의미합니다.
또한 설치하려는 Firebird 버전의 릴리스 노트를 읽어보시기를 권장합니다.
사전 요구 사항
4.0.1 및 3.0의 시스템 라이브러리 요구 사항은 동일해졌습니다: ncurses5 및 tommath0은 정적 링크, ICU는 동적 링크입니다.
배포판에 따라 ncurses5는 시스템 라이브러리(RH7/Debian)이거나 하위 호환성을 위한 패키지(RH8/Debian)로 제공됩니다.
tommath 라이브러리는 버전 0 또는 버전 1(바이너리 호환)입니다. tommath0이 없는 경우 심볼릭 링크를 생성합니다.
기타 필요한 시스템 도구는 tar와 curl입니다.
이 패키지들을 명시적으로 설치하여 패키지 관리자가 수동 제어로 표시하고 자동으로 제거하지 않도록 합니다.
빠른 설치
1. 최대 맵 수 지정
이 단계는 선택 사항이지만 프로덕션 시스템에는 강력히 권장됩니다:
/etc/sysctl.conf 파일을 열고 다음 줄을 추가합니다:
vm.max_map_count = 256000
그런 다음 적용합니다:
sysctl -p /etc/sysctl.conf
2. libtommath용 필수 저장소 설치
CentOS 7용
yum install epel-release;
CentOS 8용
dnf install epel-release;
Oracle Linux 7용
yum install oracle-epel-release-el7;
Oracle Linux 8용
dnf install oracle-epel-release-el8;
다른 배포판의 경우 필요한 패키지는 기본 저장소에서 사용할 수 있어야 합니다.
3. 패키지 및 도구 설치
CentOS 7 / Oracle Linux 7
yum makecache;
yum install ncurses libicu libtommath;
yum install curl tar;
CentOS 8 / Oracle Linux 8
dnf makecache;
dnf install ncurses-compat-libs libicu libtommath;
dnf install curl tar;
Debian 9/10, Ubuntu 18/20
apt-get install libncurses5 libtommath1;
apt-get install curl tar;
Open SUSE 15
zypper install libncurses5 libtommath1;
zypper install curl tar;
ICU 버전은 다를 수 있습니다:
Debian 9
apt-get install libicu57
Debian 10
apt-get install libicu63
Ubuntu 18
apt-get install libicu60
Ubuntu 20
apt-get install libicu66
OpenSUSE 15.0
zypper install libicu60_2
libtommath1이 있는 배포판(위의 CentOS7 및 Oracle Linux 7 제외)에서는 libtommath.so.0 심볼릭 링크를 생성해야 합니다:
TM=libtommath.so;
for LIB in `find /lib* /usr/lib* -name ${TM}.1`;
do ln -s ${TM}.1 `dirname ${LIB}`/${TM}.0;
done;
unset TM;
Firebird 4.0.1 이상의 설치 스크립트는 심볼릭 링크를 자동으로 생성할 수 있지만, Firebird 3의 경우 수동으로 생성해야 합니다.
4. Firebird 다운로드 및 설치
필요한 도구와 라이브러리를 설치한 후 다운로드, 압축 해제 및 설치 패키지 실행을 진행할 수 있습니다.
DOWNLOADLINK는 www.firebirdsql.org에서 필요한 Firebird를 다운로드하기 위한 링크라고 가정합니다.
curl -L DOWNLOADLINK | tar -zxC /tmp
cd /tmp/FIREBIRD_folder
sudo ./install.sh
여기서 DOWNLOADLINK - tar.gz 링크, FIREBIRD_folder - Firebird-version.build-0.architecture
배포판은 tar -zxC /tmp 명령으로 압축이 풀립니다.
이것이 Linux에서 Firebird 3 또는 4를 빠르게 설치하는 데 필요한 전부입니다.
선택적으로 Firebird Configuration Calculator로 최적의 구성 파일(firebird.conf 및 databases.conf)을 생성할 수 있습니다.
Firebird 설치에 대한 자세한 내용
Firebird 설치를 더 잘 구성하려는 분들을 위해 위 단계에 대한 자세한 설명을 제공합니다.
vm.max_map_count 구성
Firebird는 버전 3부터 동적 메모리 할당이 많은 SuperServer 아키텍처를 효과적으로 사용합니다. 높은 부하와 빈번한 연결/해제가 발생하는 경우 엔진이 Linux에서 메모리 조각화 한계에 도달할 수 있으며, firebird.log에 오류 11(ENOMEM) 또는 오류 12(munmap)로 표시됩니다.
메모리 조각화 한계는 기본값이 65536인 vm.max_map_count 매개변수로 제어됩니다.
서버 재부팅 후에도 이 설정을 유지하려면 /etc/sysctl.conf에 다음 줄을 추가합니다:
vm.max_map_count = 256000
적용하려면 서버를 재부팅하거나 다음 명령을 실행합니다:
sudo sysctl -p /etc/sysctl.conf
디스크 공간 계획
일반적으로 Firebird 데이터베이스가 있는 서버에 임시 파일, 데이터베이스, 로컬 백업용으로 3개의 별도 파티션을 할당하는 것이 좋습니다.
임시 파일용 파티션
주요 임시 파일은 잠금 파일, 정렬 파일, 전역 임시 테이블 및 blob 파일, 모니터링 데이터 파일입니다.
기본적으로 Linux에서 정렬 파일과 전역 임시 테이블 데이터 파일은 /tmp에, mon$ 데이터 및 잠금 테이블 파일은 /tmp/firebird에 있습니다.
임시 파일용 파티션의 적절한 크기를 결정하는 방법은 무엇일까요?
잠재적으로 정렬 및 blob 파일은 상당히 클 수 있으므로, 적절한 수의 사용자가 있는 프로덕션 시스템의 경우 임시 파일용 파티션을 약 30-40GB로 할당하는 것이 실용적인 권장 사항입니다. 적절한 크기를 더 정확히 결정하려면 임시 파일의 실제 크기를 모니터링하는 것이 좋습니다.
이러한 모니터링의 작은 문제는 정렬 파일이 생성 직후 연결 해제되어 일반적인 “ls” 명령으로 볼 수 없다는 것입니다. 이를 보려면 다음 명령으로 프로세스의 핸들을 확인해야 합니다(삭제된 것으로 표시됨):
sudo ls -lhF /proc/`pgrep firebird`/fd
이 명령의 결과로 /proc/…/fd/ 의사 폴더의 내용을 볼 수 있습니다.
이 폴더의 특정 파일에 대한 정보를 보려면 다음 명령을 사용해야 합니다:
sudo stat -L /proc/`pgrep firebird`/fd/NNNNN
여기서 NNNNN은 파일의 디스크립터입니다.
이 명령은 엔진이 단일 프로세스로 실행되는 SuperServer 및 SuperClassic 아키텍처에서 사용할 수 있습니다. 물론 pgrep firebird 대신 Firebird 프로세스의 핸들 번호를 지정할 수도 있습니다.
데이터베이스 파일용 파티션
데이터베이스 파일용 파티션은 모든 데이터베이스 파일을 저장할 수 있을 만큼 충분해야 하며, 가장 큰 데이터베이스 크기와 동일한 여유 공간, 그리고 향후 2-3년간의 성장 여유분을 포함해야 합니다.
로컬 백업용 파티션
최소한 로컬 백업용 파티션은 모든 로컬 백업과 가장 큰 데이터베이스의 백업을 저장할 수 있을 만큼 충분해야 합니다.
또한 복원을 수행하기 위해 백업 파티션에 가장 큰 데이터베이스 크기와 동일한 추가 여유 공간을 두는 것이 좋습니다.
백업에 대한 추가 자료
firebird 사용자 생성(선택 사항)
설치 스크립트는 존재하지 않는 경우 “firebird"라는 사용자와 그룹을 생성하여 Firebird의 모든 활동을 이 사용자로 수행합니다(Linux 시스템의 모범 사례).
또한 데이터베이스 파일과 데이터베이스 및 백업이 있는 폴더는 이 사용자에 대한 소유권 또는 권한이 있어야 합니다.
때로는 설치 전에 “firebird” 사용자와 그룹을 생성하는 것이 좋습니다:
groupadd firebird &&
useradd -M -b /opt -s /sbin/nologin \
-g firebird -u UID firebird
firebird 사용자의 경우 홈 폴더를 생성하지 않고(-M 스위치), 기본 폴더만 지정합니다(-b).
셸 nologin과 -s 스위치를 함께 사용하면 서버에 대한 표준 로그인이 차단됩니다.
필요한 패키지 설치
Firebird 3.0 및 4.0은 ncurses(libncurses.so.5), ICU(버전 링크 없음, ldd 출력에 표시되지 않음), tommath(libtommath.so.0) 라이브러리에 의존합니다.
Linux 배포판에 따라 버전이 있거나 없는 라이브러리 이름을 사용해야 합니다. 실용적인 복사-붙여넣기 명령은 위에 나와 있으며, 아래에서 자세히 설명합니다.
CentOS 및 Oracle Linux
버전 7에는 필요한 패키지가 기본으로 포함되어 있으며, 버전 8에서는 ncurses-compat-libs 설치와 libtommath.so.0 심볼릭 링크 생성이 필요합니다.
Debian, Ubuntu 및 OpenSUSE
Debian 9 및 10, Ubuntu 18 및 20, OpenSUSE 15에서는 libncurses5와 libtommath1을 설치해야 하며, ICU 버전을 확인하려면 불완전한 이름으로 검색할 수 있습니다:
Ubuntu에서
apt-cache search libicu5
OpenSUSE 15에서
zypper search libicu6
Firebird 설치 세부 사항
설치 전에 시스템 매개변수 vm.max_map_count를 증가시키고, ICU, ncurses 및 tommath 라이브러리를 설치했습니다. 그런 다음 ncurses와 tommath(libncures.so.5 및 libtommath.so.0)의 올바른 버전이 있는지 확인하거나 필요한 심볼릭 링크를 만들었습니다.
선택적으로 firebird 사용자와 그룹을 생성할 수 있습니다.
그 후 Firebird를 설치할 수 있습니다. 이를 위해 설치 패키지가 압축 해제된 폴더로 이동하여 설치를 시작합니다:
./install.sh
Enter를 눌러 설치를 확인하고, 프롬프트가 표시되면 SYSDBA의 비밀번호를 지정합니다.
처음에는 Firebird가 기본 구성 파일로 설치됩니다. 기본 구성은 SuperServer 아키텍처로 실행되며 적절한 값으로 설정됩니다: 데이터베이스당 캐시(DefaultDbCachePages, Page buffers라고도 함)는 2048로 설정되고, 정렬 버퍼(TempCacheLimit)는 64M입니다(v3에서는 서버용, v4에서는 데이터베이스당).
firebird.conf의 주석 처리되지 않은 매개변수를 보려면 다음 명령을 사용할 수 있습니다:
grep -v ^# firebird.conf | grep -v ^$
Firebird Configuration Calculator로 최적의 구성 파일을 생성하거나 매개변수를 수동으로 변경하는 경우, 변경 사항은 Firebird 서비스 재시작 후에 적용됩니다(SuperServer 및 SuperClassic의 경우, Classic의 경우 모든 Firebird 프로세스 재시작 필요).
Firebird 3부터 SuperServer, SuperClassic 및 Classic에 대한 별도의 systemd 유닛이 있음을 유의하시기 바랍니다.