Building custom packages
This is a guide on how to build custom packages for Azure Linux. Once built, the RPM files can be provided to the Image Customizer tool using the --rpm-source command-line arg.
This guide uses an Azure Linux container and docker to build the packages. This avoids the complexity of using the Azure Linux toolkit (which has to be capable of building Azure Linux from scratch, including on other Linux distros).
Quick start
- 
    Create a file called samplescript.shwith the following contents:echo "Hello, World"
- 
    Create a file called samplepackage.specwith the following contents:Summary: A sample package Name: samplepackage Version: 0.0.1 Release: 1%{?dist} Vendor: Contoso License: Proprietary Source0: samplescript.sh Requires: bash %description A very descriptive description for the sample package. %prep %build %install install -D -m 755 %{SOURCE0} %{buildroot}%{_bindir}/samplescript.sh %files %{_bindir}/samplescript.sh
- 
    Create a file called samplepackage.Dockerfilewith the following contents:Azure Linux 2.0: FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 RUN tdnf update -y RUN tdnf install -y rpm-build WORKDIR /work COPY samplepackage.spec . COPY samplescript.sh /usr/src/mariner/SOURCES/ RUN rpmbuild -bb --build-in-place samplepackage.specAzure Linux 3.0: FROM mcr.microsoft.com/azurelinux/base/core:3.0 RUN tdnf update -y RUN tdnf install -y rpm-build WORKDIR /work COPY samplepackage.spec . COPY samplescript.sh /usr/src/azl/SOURCES/ RUN rpmbuild -bb --build-in-place samplepackage.spec
- 
    Build the rpm file using docker: docker build -t samplepackage:latest -f samplepackage.Dockerfile .
- 
    Extract RPM file(s) from the container image: id=$(docker create samplepackage:latest) docker cp $id:/usr/src/mariner/RPMS ./ docker rm -v $id