# 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
```