105 lines
2.9 KiB
Markdown
105 lines
2.9 KiB
Markdown
# Building Package or Kernel Modules Using a Script
|
|
|
|
You can use a script to build a single Photon OS package without rebuilding all Photon OS packages. You just need a `.spec` specification file and sources. You place the sources and the specification files in the same folder and run the `build_spec.sh` script. The script performs the following steps:
|
|
|
|
- Creates sandbox using docker.
|
|
- Installs build tools and `.spec` build requirements from the Photon OS repository.
|
|
- Runs `rpmbuild`.
|
|
|
|
**Result:** You have a native Photon OS RPM package.
|
|
|
|
The `build-spec.sh` script is located in the `photon/tools/scripts/` folder.
|
|
|
|
- [Prerequisties](#prerequisites)
|
|
- [Procedure](#procedure)
|
|
- [Example](#example)
|
|
- [Build Logs](#build-logs)
|
|
|
|
## Prerequisites
|
|
|
|
Before you run the `build-spec.sh` script, perform the following steps:
|
|
|
|
- Ensure you have any Linux OS with docker daemon running.
|
|
- Place the source and RPM `.spec` files in the same folder, that is, `$WORKDIR`.
|
|
|
|
## Procedure
|
|
|
|
Run the script. Provide the RPM `.spec` file name, including absolute or relative path, as argument:
|
|
|
|
```
|
|
./photon/tools/scripts/build_spec.sh <$WORKDIR/rpm_spec_file.spec>
|
|
```
|
|
|
|
The RPMs and full build logs are generated in the `$WORKDIR/stage` folder.
|
|
|
|
## Example
|
|
|
|
The following example runs the script with `simple-module.spec` as argument, where `simple-module.spec` is the specification file:
|
|
|
|
```
|
|
./photon/tools/scripts/build_spec.sh ~/photon/tools/examples/build_spec/simple-module.spec
|
|
```
|
|
|
|
The following are the contents of the `simple-module.spec` file:
|
|
|
|
```
|
|
Summary: Simple Linux module
|
|
Name: simple-module
|
|
Version: 4.18.9
|
|
Release: 5%{?dist}
|
|
License: GPLv2
|
|
Group: System Environment/Kernel
|
|
Vendor: VMware, Inc.
|
|
Distribution: Photon
|
|
Source0: module_example.tar.xz
|
|
BuildRequires: linux-devel = 4.18.9
|
|
BuildRequires: kmod
|
|
Requires: linux = 4.18.9
|
|
|
|
%description
|
|
Example of building linux module for Photon OS
|
|
|
|
%prep
|
|
%setup -q -n module_example
|
|
|
|
%build
|
|
make -C `echo /usr/src/linux-headers-4.18.9*` M=`pwd` VERBOSE=1 modules %{?_smp_mflags}
|
|
|
|
%install
|
|
make -C `echo /usr/src/linux-headers-4.18.9*` M=`pwd` INSTALL_MOD_PATH=%{buildroot} modules_install
|
|
# fix permissins to generate non empty debuginfo
|
|
find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
|
|
|
|
%post
|
|
/sbin/depmod -a
|
|
|
|
%files
|
|
%defattr(-,root,root)
|
|
/lib/modules/*
|
|
|
|
```
|
|
|
|
## Build Logs
|
|
|
|
The followiing logs indicate the steps that the script performs internally:
|
|
|
|
```
|
|
1. Create sandbox
|
|
Use local build template image OK
|
|
2. Prepare build environment
|
|
Create source folder OK
|
|
Copy sources from <HOME>/photon/tools/examples/build_spec/simple-module OK
|
|
Install build requirements OK
|
|
3. Build
|
|
Run rpmbuild OK
|
|
4. Get binaries
|
|
Copy RPMS OK
|
|
Copy SRPMS OK
|
|
5. Destroy sandbox
|
|
Stop container OK
|
|
Remove container OK
|
|
|
|
Build completed. RPMS are in '<HOME>/photon/tools/examples/build_spec/simple-module/stage' folder
|
|
```
|
|
|