text: ---
  title: 'Customization'
  ---
  
  The installer image contains [`ONBUILD`](https://docs.docker.com/engine/reference/builder/#onbuild) instructions that handle the following:
  
  - the decompression, and unpacking of the `initramfs.xz`
  - the unsquashing of the rootfs
  - the copying of new rootfs files
  - the squashing of the new rootfs
  - and the packing, and compression of the new `initramfs.xz`
  
  When used as a base image, the installer will perform the above steps automatically with the requirement that a `customization` stage be defined in the `Dockerfile`.
  
  For example, say we have an image that contains the contents of a library we wish to add to the Talos rootfs.
  We need to define a stage with the name `customization`:
  
  ```docker
  FROM scratch AS customization
  COPY --from=<name|index> <src> <dest>
  ```
  
  Using a multi-stage `Dockerfile` we can define the `customization` stage and build `FROM` the installer image:
  
  ```docker
  FROM scratch AS customization
  COPY --from=<name|index> <src> <dest>
  
  FROM docker.io/autonomy/installer:latest
  ```
  
  When building the image, the `customization` stage will automatically be copied into the rootfs.
  The `customization` stage is not limited to a single `COPY` instruction.
  In fact, you can do whatever you would like in this stage, but keep in mind that everything in `/` will be copied into the rootfs.
  
  > Note: `<dest>` is the path relative to the rootfs that you wish to place the contents of `<src>`.
  
  To build the image, run:
  
  ```bash
  docker build --squash -t <organization>/installer:latest .
  ```
  
  In the case that you need to perform some cleanup _before_ adding additional files to the rootfs, you can specify the `RM` [build-time variable](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg):
  
  ```bash
  docker build --squash --build-arg RM="[<path> ...]" -t <organization>/installer:latest .
  ```
  
  This will perform a `rm -rf` on the specified paths relative to the rootfs.
  
  > Note: `RM` must be a whitespace delimited list.
  
  The resulting image can be used to:
  
  - generate an image for any of the supported providers
  - perform bare-metall installs
  - perform upgrades
  
  We will step through common customizations in the remainder of this section.
  