博客 / 詳情

返回

so庫打包成Linux安裝包

場景介紹

在Linux系統上,作為動態庫文件的so文件的應用是非常廣泛的,在有些場景下so庫是需要打包為安裝包來進行使用的,例如開發了一個so庫進行分發時,就需要將so庫打包成安裝包釋放到系統的指定路徑下進行集成分發,這裏介紹一下將so庫打包為Linux系統的安裝包的流程。

so庫打包流程

so庫打包為rpm

so庫打包為rpm安裝包是通過rpm-build和rpmdevtools工具實現的,以loader_linux_x64.so為例,具體流程如下:

1.安裝rpm-build和rpmdevtools

sudo yum install rpm-build rpmdevtools -y
或
sudo dnf install rpm-build rpmdevtools -y

2.創建RPM構建目錄結構

1.使用命令自動創建目錄結構
rpmdev-setuptree

或

2.手動創建目錄
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

目錄結構介紹

  • BUILD: 源碼包解壓和編譯的臨時目錄。
  • BUILDROOT: 虛擬安裝根目錄,打包過程中文件會安裝到這裏。
  • RPMS: 存放生成的二進制RPM包。
  • SOURCES: 存放源代碼(如.tar.gz包)和補丁文件。
  • SPECS: 存放spec文件(打包的"圖紙")。
  • SRPMS: 存放源碼RPM包。

3.將loader_linux_x64.so文件放在指定目錄,並打包成 .tar.gz 格式放入SOURCES目錄

mkdir -p /tmp/mylib-1.0/usr/lib64

cp /path/to/your/loader_linux_x64.so /tmp/mylib-1.0/usr/lib64/

tar -czvf mylib-1.0.tar.gz mylib-1.0 .

mv mylib-1.0.tar.gz ~/rpmbuild/SOURCES/

4.在~/rpmbuild/SPECS/目錄下創建一個名為mylib.spec的文件,用來構建rpmbuildRPM包,具體內容如下:

Name: mylib
Version: 1.0
Release: 1%{?dist}
Summary: My custom library (loader_linux_x64.so)

License: GPLv3+

Source0: %{name}-%{version}.tar.gz

BuildArch: x86_64

%description
This package provides the loader_linux_x64.so library file.

%prep
%setup -q

%install
rm -rf %{buildroot}

install -m 755 -d %{buildroot}/usr/lib64
install -m 755 usr/lib64/loader_linux_x64.so %{buildroot}/usr/lib64/

%files
/usr/lib64/loader_linux_x64.so

主要內容提醒:

  • NameVersionRelease: 定義了軟件包的名稱、版本和發行號。
  • Source0: 指定源碼包名稱,%{name}%{version} 是宏,會自動展開。
  • %install: 安裝階段,將文件複製到虛擬安裝根目錄 (%{buildroot}) 下。注意文件最終會安裝到系統的 /usr/lib64/,但構建時需安裝到 %{buildroot}/usr/lib64/
  • %files: 必須明確列出包要包含的文件路徑(相對於根目錄的路徑)。這裏指定安裝 /usr/lib64/loader_linux_x64.so

5.使用rpmbuild命令構建RPM包

cd ~/rpmbuild/SPECS

# 構建二進制RPM包,-bb表示只生成二進制包
rpmbuild -bb mylib.spec

構建成功會在~/rpmbuild/RPMS/x86_64/(取決於系統架構)目錄下找到生成的RPM文件,例如mylib-1.0-1.el7.x86_64.rpm

6.安裝rpm包後loader_linux_x64.so庫會在系統的/usr/lib64/loader_linux_x64.so路徑下

so庫打包為deb

so庫打包為deb安裝包的流程更為簡單一些,直接通過dpkg-deb工具即可,以loader_linux_x64.so為例,具體流程如下:

1.創建包目錄結構

mkdir -p ~/loader_pkg

2.將loader_linux_x64.so文件放在標準的系統路徑下,在loader_pkg目錄下創建目錄並拷貝文件。

mkdir -p usr/lib
cp /path/to/your/loader_linux_x64.so usr/lib/

3.在loader_pkg目錄下,創建一個名為DEBIAN的文件夾(全部大寫),這個文件夾用來存放包的控制信息。

4.在DEBIAN目錄下創建控制腳本(DEBIAN/control文件),腳本內容可以參考以下內容:

Package: loader-linux-x64
Version: 1.0.0
Section: libs
Priority: optional
Architecture: amd64
Depends: libc6 (>= 2.34)

5.在loader_pkg目錄的上一級目錄中,運行以下命令來構建.deb 文件:

dpkg-deb -b loader_pkg loader-linux-x64_1.0.0_amd64.deb

構建成功後會在當前目錄找到loader-linux-x64_1.0.0_amd64.deb文件。

6.安裝deb包後loader_linux_x64.so庫會在系統的/usr/lib/loader_linux_x64.so路徑下

安全防護

以上介紹了so庫構建為安裝包的打包流程,該過程方便了so庫的分發、版本管理、依賴管理等一系列流程,但是安裝包安裝釋放後的so文件在正式發佈時還是有很大的風險的,打包是方便了so庫的使用流程,其本身的代碼並沒有進行保護,發佈後還是源碼。

針對so庫的安全防護,這裏推薦一款成熟的保護工具:Virbox Protector,該工具為Linux ELF格式的so庫文件提供了全面的保護方案。在文件層面,具備壓縮、內存保護和校驗功能;在函數層面,則提供了代碼混淆和代碼虛擬化等高強度安全措施,全方位的保護so庫安全。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.