# OxOffice Online 社群版編譯說明

如果想編譯在 GitHub 上最新版本的 OxOffice Online 社群版本，請參考本文件說明該如何建立 OxOffice Online 社群版的編譯環境及編譯流程。

# 在 CentOS 7 環境下編譯 OxOOL

- 請參考 [在 CentOS 7 環境下安裝(社群版)](https://docs.ossii.com.tw/books/oxoffice-online-%E6%8A%80%E8%A1%93%E6%89%8B%E5%86%8A/page/%E5%9C%A8-centos-7-%E7%92%B0%E5%A2%83%E4%B8%8B%E5%AE%89%E8%A3%9D%28%E7%A4%BE%E7%BE%A4%E7%89%88%29) 這篇文章的 CentOS 7 安裝 OxOOL 套件的過程，但在關閉 SELinux 後請重新開機，並以一般使用者的身份登入（打包時請勿使用 root 使用者身份打包）。

- 先關閉原本安裝的 OxOOL

```Shell
sudo systemctl stop oxool
sudo systemctl disable oxool
```

- 安裝編譯 OxOOL 要用的套件<span style="color: #ff6600;">  
    </span>

```shell
sudo yum install epel-release -y
sudo yum update -y
sudo yum install git yum-utils libpcap libcap-devel poco-devel ccache python36-polib python36-lxml -y
sudo yum install libtool gcc-c++ fontconfig-devel cppunit-devel pam-devel rpm-build -y
```

- 安裝並設定 Node.js

```shell
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install nodejs -y
```

- 將 OxOOL 源始碼 clone 回來

```shell
git clone https://github.com/OSSII/oxool-community.git
```

- 開始編譯 OxOOL 套件

```shell
cd oxool-community
./autogen.sh
./configure
make dist
rpmbuild -tb oxool-x.x.x.tar.gz #在做完以上步驟後，clone 下來的目錄內應會有一個檔名類似 oxool-3.2.11.tar.gz 的壓縮檔，將後面的 oxool-x.x.x.tar.gz 代換為此檔的檔名即可
```

- 編譯完成的 rpm 會放在以下路徑

```shell
~/rpmbuild/RPMS/x86_64
```

套件直接就可以拿來安裝～編譯完成。

# 在 Ubuntu 18.04 環境下編譯 OxOOL

- 請參考 [在 Ubuntu 18.04 環境下安裝(社群版)](https://docs.ossii.com.tw/books/oxoffice-online-%E6%8A%80%E8%A1%93%E6%89%8B%E5%86%8A/page/%E5%9C%A8-ubuntu-1804-%E7%92%B0%E5%A2%83%E4%B8%8B%E5%AE%89%E8%A3%9D%28%E7%A4%BE%E7%BE%A4%E7%89%88%29) 這篇文章的 Ubuntu 18.04 安裝 OxOOL 套件的過程。

- 先關閉原本安裝的 OxOOL

```Shell
sudo systemctl stop oxool
sudo systemctl disable oxool
```

- 安裝 git 指令

```Shell
sudo apt install git -y
```

- 將 OxOOL 源始碼 clone 回來

```Shell
git clone https://github.com/OSSII/oxool-community.git
```

- 安裝 Ubuntu 18.04 編譯環境所需的套件

```Shell
cd oxool-community
./install_build_require_ubuntu.sh
```

- 安裝並設定 Node.js

```Shell
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
```

- 編譯及測試執行 OxOOL

切換到 oxool-cummunity 程式的主目錄下，開始編譯程式。

```Shell
cd oxool-community
./autogen.sh # 過程中若是提示找不到 fontconfig，請安裝 libfontconfig1-dev；若提示缺少 Poco 標頭，則請安裝 libpoco-dev
make -j2
```

如果成功就會看到以下訊息請您輸入編譯帳號的密碼：

```
[sudo] password for oxoffice:
```

輸入後，會繼續編譯直到完成，然後輸入以下指令測試是否能運行成功：

```Shell
make run
```

如果看到以下訊息，就代表已經可以成功測試了。

```
Ready to accept connections on port 9980.
```

- 打包 OxOOL deb 套件

請在專案的根目錄執行

```Shell
debuild -b -uc -us # 若您已先執行過上面的編譯動作，在執行此步驟前請先在您的 oxool-community 目錄執行 git clean -fdx 指令，如此才能正常打包
```

最後打包的 deb 結果會生成在專案的上層目錄

```Shell
cd ..
ls oxool_3.x.x-1.community_amd64.deb
```

套件直接就可以拿來安裝～編譯完成。

# 在 CentOS 7 環境下編譯 OxOffice Online v4 社群版

請先下載並安裝最新版本的 CentOS 7，然後執行以下指令更新系統與安裝必要的軟體包（此處是以一般使用者身份登入為準，且編譯時不建議使用 root 身份），其中 devtoolset-11 是用來安裝較新版本的 GCC 套裝軟體，數字為 GCC 的主要版本，請至少使用 GCC 8 以上的版本。
```Shell
sudo yum upgrade -y
sudo yum install vim net-tools unzip wget -y
cd /etc/yum.repos.d
sudo wget http://www.oxoffice.com.tw/rpm/el/oxool-community-v4-centos7.repo
sudo yum install epel-release -y
sudo yum upgrade -y
sudo yum install git yum-utils libpcap libcap-devel libgit2-devel poco-devel ccache python36-devel python36-polib python36-lxml -y
sudo yum install libtool gcc-c++ fontconfig-devel cppunit-devel pam-devel rpm-build -y
sudo yum install oxoffice* poco* gumbo* -y
sudo yum install centos-release-scl
sudo yum install devtoolset-11
```
停用 SELinux
```Shell
vim /etc/selinux/config # vim 可代換成任何您慣用的文字編輯器
# 尋找 SELinux=enforcing 此行並將 enforcing 改為 disabled 或 permissive 並存檔離開
```
安裝並設定 Node.js
```Shell
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install nodejs -y
```
將 OxOffice Online v4 社群版的原始碼 clone 下來
```Shell
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git checkout v4
```
編譯 OxOffice Online v4 社群版（此處的 devtoolset-11 需根據上面選擇安裝的版本而定）
```Shell
scl enable devtoolset-11 bash
./autogen.sh
./configure
make dist
rpmbuild -tb oxool-x.x.x.tar.gz
```
編譯完成的 RPM 軟體包會放在以下路徑
```Shell
~/rpmbuild/RPMS/x86_64
```
此處的 RPM 軟體包即可用來安裝。

# 在 Rocky Linux 8 環境下編譯 OxOffice Online v4 社群版

請先安裝 Rocky Linux 8（可參照[Rocky Linux 8 基本安裝](https://docs.ossii.com.tw/books/rocky-linux-8)），然後執行以下指令更新系統與安裝必要的軟體包（此處是以一般使用者身份登入為準，且編譯時不建議使用 root 身份）
```Shell
sudo dnf config-manager --set-enabled powertools
sudo dnf upgrade -y
sudo dnf install vim net-tools unzip wget -y
cd /etc/yum.repos.d
sudo wget http://www.oxoffice.com.tw/rpm/el/oxool-community-v4-el8.repo
sudo dnf install epel-release -y
sudo dnf upgrade -y
sudo dnf install git yum-utils libpcap libcap-devel libgit2-devel poco-devel ccache python3-devel python3-polib python3-lxml -y
sudo dnf install libtool gcc-c++ fontconfig-devel cppunit-devel pam-devel rpm-build -y
sudo dnf install oxoffice* poco* -y
```
停用 SELinux
```Shell
vim /etc/selinux/config # vim 可代換成任何您慣用的文字編輯器
# 尋找 SELinux=enforcing 此行並將 enforcing 改為 disabled 或 permissive 並存檔離開
```
安裝並設定 Node.js
```Shell
sudo dnf module enable nodejs:18 -y
sudo dnf install nodejs -y
```
將 OxOffice Online v4 社群版的原始碼 clone 下來
```Shell
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git switch v4
```
編譯 OxOffice Online v4 社群版
```Shell
./autogen.sh
./configure
make dist
rpmbuild -tb oxool-x.x.x.tar.gz
```
編譯完成的 RPM 軟體包會放在以下路徑
```Shell
~/rpmbuild/RPMS/x86_64
```
此處的 RPM 軟體包即可用來安裝。

# 在 Ubuntu 20.04 環境下編譯 OxOffice Online v4 社群版

請先安裝 Ubuntu 20.04（可參照 [Ubuntu Server 20.04 基本安裝](https://docs.ossii.com.tw/books/ubuntu-server-2004)），然後執行系統更新並安裝必要的軟體包
```Shell
sudo apt update
sudo apt upgrade -y
sudo apt install vim openssh-server net-tools curl git -y
# 如果有重新啟動服務的提示，請選擇 yes 即可
curl http://www.oxoffice.com.tw/deb/OSSII.key | sudo apt-key add
cd /etc/apt/sources.list.d/
sudo wget http://www.oxoffice.com.tw/deb/oxool-community-v4-focal.list
sudo apt update
sudo apt install oxoffice* libpoco-dev
```
安裝更多編譯時需要的軟體包
```Shell
sudo apt update
sudo apt install -y build-essential libsqlite3-dev libcurl4-openssl-dev libcppunit-dev libcap-dev libcap2-bin libgit2-dev libtool libpng-dev automake m4 wget curl autoconf pkg-config openssl ccache fontconfig libfontconfig1-dev libpam-dev
sudo apt install -y devscripts debhelper dh-systemd dh-exec
sudo apt install -y libodbc1 libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5
sudo apt install -y hunspell
sudo apt install -y python3-polib python3-lxml
```
安裝並設定 Node.js
```Shell
cd ~
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
```
將 OxOffice Online v4 社群版的原始碼 clone 下來
```Shell
cd ~
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git switch v4
```
編譯 OxOffice Online v4 社群版
```Shell
debuild -b -uc -us
```
編譯好的 deb 軟體包會放在編譯用目錄的上層
```Shell
cd ..
ls oxool_4.x.x-1.community_amd64.deb
```
此處的 DEB 軟體包即可用來安裝。

注意：若您在編譯過程中遇到 Node.js/npm 的記憶體不足問題，可在專案根目錄下依序執行以下指令：
```Shell
cd loleaflet
npm install
cd archived-packages
npm install
cd ..
touch node_modules
```
如此即可避開此問題。

# 在 Rocky Linux 9 環境下編譯 OxOffice Online v4 社群版

請先安裝 Rocky Linux 9，然後執行以下指令更新系統與安裝必要的軟體包（此處是以一般使用者身份登入為準，且編譯時不建議使用 root 身份）：

```Shell
sudo dnf config-manager --set-enabled crb
sudo dnf upgrade -y
sudo dnf install vim net-tools unzip wget -y
sudo wget -O /etc/yum.repos.d/ooxml-community-v4-el8.repo http://www.oxoffice.com.tw/rpm/el/oxool-community-v4-el8.repo
sudo dnf install epel-release -y
sudo dnf upgrade -y
sudo dnf install git yum-utils libpcap libcap-devel libgit2-devel poco-devel ccache python3-devel python3-polib python3-lxml -y
sudo dnf install libtool gcc-c++ fontconfig-devel cppunit-devel pam-devel rpm-build -y
sudo dnf install oxoffice* poco* gumbo* -y
```

停用 SELinux

```Shell
vim /etc/selinux/config # vim 可代換成任何您慣用的文字編輯器
# 尋找 SELinux=enforcing 此行並將 enforcing 改為 disabled 或 permissive 並存檔離開
```

安裝並設定 Node.js

```Shell
sudo dnf module enable nodejs:18 -y
sudo dnf install nodejs -y
```

將 OxOffice Online v4 社群版的原始碼 clone 下來

```Shell
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git switch v4
```

編譯 OxOffice Online v4 社群版

```Shell
./autogen.sh
./configure
make dist
rpmbuild -tb oxool-x.x.x.tar.gz
```

編譯完成的 RPM 軟體包會放在以下路徑

```Shell
~/rpmbuild/RPMS/x86_64
```

此處的 RPM 軟體包即可用來安裝。

# 在 Rocky Linux 8 環境下編譯 OxOffice Online v5 社群版

請先安裝 Rocky Linux 8（可參照[Rocky Linux 8 基本安裝](https://docs.ossii.com.tw/books/rocky-linux-8)），然後執行以下指令更新系統與安裝必要的軟體包（此處是以一般使用者身份登入為準，且編譯時不建議使用 root 身份）
```Shell
sudo dnf config-manager --set-enabled powertools
sudo dnf upgrade -y
sudo dnf install vim net-tools unzip wget -y
sudo wget -P /etc/yum.repos.d http://www.oxoffice.com.tw/rpm/el/oxool-community-v5-el8.repo
sudo dnf install epel-release -y
sudo dnf upgrade -y
sudo dnf install make git yum-utils libpcap libcap-devel libgit2-devel libzstd-devel poco-devel ccache python3-devel python3-polib python3-lxml -y
sudo dnf install libtool gcc-c++ fontconfig-devel cppunit-devel pam-devel rpm-build -y
sudo dnf install oxoffice* poco* -y
```
停用 SELinux
```Shell
vim /etc/selinux/config # vim 可代換成任何您慣用的文字編輯器
# 尋找 SELinux=enforcing 此行並將 enforcing 改為 disabled 或 permissive 並存檔離開
```
安裝並設定 Node.js
```Shell
sudo dnf module enable nodejs:18 -y
sudo dnf install nodejs -y
```
將 OxOffice Online v5 社群版的原始碼 clone 下來
```Shell
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git switch v5
```
編譯 OxOffice Online v5 社群版
```Shell
./autogen.sh
make dist
rpmbuild -tb oxool-x.x.x.tar.gz
```
編譯完成的 RPM 軟體包會放在以下路徑
```Shell
~/rpmbuild/RPMS/x86_64
```
此處的 RPM 軟體包即可用來安裝。

# 在 Ubuntu 24.04 環境下編譯 OxOffice Online v5 社群版

請先安裝 Ubuntu 24.04，然後執行系統更新並安裝必要的軟體包
```Shell
sudo apt update
sudo apt upgrade -y
sudo apt install vim openssh-server net-tools curl git -y
# 如果有重新啟動服務的提示，請選擇 yes 即可
sudo curl -o /etc/apt/keyrings/OSSII.asc http://www.oxoffice.com.tw/deb/OSSII.key
sudo curl -o /etc/apt/sources.list.d/oxool-community-v5-noble.list http://www.oxoffice.com.tw/deb/oxool-community-v5-noble.list
sudo apt update
sudo apt install oxoffice* libpoco-dev libgumbo-dev
```
安裝更多編譯時需要的軟體包
```Shell
sudo apt update
sudo apt install -y build-essential libsqlite3-dev libcurl4-openssl-dev libcppunit-dev libcap-dev libcap2-bin libgit2-dev libtool libpng-dev automake m4 wget autoconf pkg-config openssl libgumbo-dev ccache fontconfig libfontconfig1-dev libpam-dev
sudo apt install -y devscripts debhelper dh-exec
sudo apt install -y libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5
sudo apt install -y hunspell
sudo apt install -y python3-polib python3-lxml
```
安裝並設定 Node.js
```Shell
cd ~
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
sudo -E bash nodesource_setup.sh
sudo apt install -y nodejs
```
將 OxOffice Online v5 社群版的原始碼 clone 下來
```Shell
cd ~
git clone https://github.com/OSSII/oxool-community.git
cd oxool-community
git switch v5
```
編譯 OxOffice Online v5 社群版
```Shell
./autogen.sh
debuild -b -uc -us
```
編譯好的 deb 軟體包會放在編譯用目錄的上層
```Shell
cd ..
ls oxool*.deb
```
此處的 DEB 軟體包即可用來安裝。

注意：若您在編譯過程中遇到 Node.js/npm 的記憶體不足問題，可在專案根目錄下依序執行以下指令：
```Shell
cd loleaflet
npm install
cd archived-packages
npm install
cd ..
touch node_modules
```
如此即可避開此問題。