Go to file
David Runge 428bf47370
Add build stage for continuous integration
.gitlab-ci.yml:
Add a build stage to the gitlab CI, that facilitates the scripts below .gitlab/ci/, building the baseline and releng
profiles in parallel.
Distinguish the use-case in which builds are done for master, schedules and tags in a secure environment and any other
where builds just have to be fast (for ensuring nothing is broken).

Use MiB as block size for the du call when generating data for the metrics file.
2021-01-31 23:25:22 +01:00
.gitlab/ci Add scripts for continuous integration 2021-01-31 16:23:04 +01:00
archiso Support setting more variables in profiledef.sh and rework the way overrides are applied 2021-01-29 00:01:24 +02:00
configs configs/releng: move locale-gen from customize_airootfs.sh to a pacman hook 2021-01-31 11:34:56 +02:00
docs Using edk2-shell for UEFI shell 2020-05-30 19:30:52 +02:00
scripts rm un-used set_image() dupe of check_image() in run_archiso.sh 2021-01-31 01:02:53 +00:00
.editorconfig Add license and basic documentation 2020-07-29 14:27:48 +02:00
.gitattributes Add .gitignore and .gitattributes 2012-08-03 22:03:03 +02:00
.gitignore add cloud-init files to .gitignore (and loosen out/ and work/) 2021-01-23 16:07:36 +00:00
.gitlab-ci.yml Add build stage for continuous integration 2021-01-31 23:25:22 +01:00
AUTHORS.rst Update my email in AUTHORS 2021-01-31 02:12:36 +01:00
CONTRIBUTING.rst CONTRIBUTING.rst: use make lint to run shellcheck 2020-07-30 13:37:55 +03:00
LICENSE Add license and basic documentation 2020-07-29 14:27:48 +02:00
Makefile Add continuous integration scripts to linting 2021-01-31 16:27:41 +01:00
README.profile.rst Keep all SYSLINUX files in /syslinux 2020-11-30 16:00:15 +02:00
README.rst mkarchiso: add version information 2021-01-26 10:00:38 +01:00

=======
archiso
=======

The archiso project features scripts and configuration templates to build installation media (*.iso* images) for BIOS
and UEFI based systems on the x86_64 architecture.
Currently creating the images is only supported on Arch Linux.

Requirements
============

The following packages need to be installed to be able to create an image with the included scripts:

* arch-install-scripts
* dosfstools
* e2fsprogs
* libisoburn
* mtools
* squashfs-tools

For running the images in a virtualized test environment the following packages are required:

* edk2-ovmf
* qemu

For linting the shell scripts the following package is required:

* shellcheck

Profiles
========

Archiso comes with two profiles: **baseline** and **releng**. While both can serve as starting points for creating
custom live media, **releng** is used to create the monthly installation medium.
They can be found below `configs/baseline/ <configs/baseline/>`_  and `configs/releng/ <configs/releng/>`_
(respectively). Both profiles are defined by files to be placed into overlays (e.g. *airootfs* -> *the image's /*).

Read `README.profile.rst <README.profile.rst>`_ to learn more about how to create profiles.

Create images
=============

Usually the archiso tools are installed as a package. However, it is also possible to clone this repository and create
images without installing archiso system-wide.

As filesystems are created and various mount actions have to be done when creating an image, **root** is required to run
the scripts.

When archiso is installed system-wide and the modification of a profile is desired, it is necessary to copy it to a
writeable location, as */usr/share/archiso* is tracked by the package manager and only writeable by root (changes will
be lost on update).

The examples below will assume an unmodified profile in a system location (unless noted otherwise).

It is advised to consult the help output of **mkarchiso**:

  .. code:: bash

    mkarchiso -h

Create images with packaged archiso
-----------------------------------

  .. code:: bash

    mkarchiso -w path/to/work_dir -o path/to/out_dir path/to/profile

Create images with local clone
------------------------------

Clone this repository and run:

  .. code:: bash

    ./archiso/mkarchiso -w path/to/work_dir -o path/to/out_dir path/to/profile

Testing
=======

The convenience script **run_archiso** is provided to boot into the medium using qemu.
It is advised to consult its help output:

  .. code:: bash

    run_archiso -h

Run the following to boot the iso using BIOS:

  .. code:: bash

    run_archiso -i path/to/an/arch.iso

Run the following to boot the iso using UEFI:

  .. code:: bash

    run_archiso -u -i path/to/an/arch.iso

The script can of course also be executed from this repository:


  .. code:: bash

    ./scripts/run_archiso.sh -i path/to/an/arch.iso

Installation
============

To install archiso system-wide use the included **Makefile**:

  .. code:: bash

    make install

Optionally install archiso's mkinitcpio hooks:

  .. code:: bash

    make install-initcpio

Optional Features
=================

The iso image contains a grub environment block holding the iso version. This allows to boot the iso image from grub
with a version specific cow directory to mitigate overlay clashes.

  .. code:: grub
      loopback loop archlinux.iso
      load_env -f (loop)/arch/grubenv
      linux (loop)/arch/boot/x86_64/vmlinuz-linux ... \
          cow_directory=archlinux/${VERSION} ...
      initrd (loop)/arch/boot/x86_64/initramfs-linux-lts.img

Contribute
==========

Development of archiso takes place on Arch Linux' Gitlab: https://gitlab.archlinux.org/archlinux/archiso

Please read our distribution-wide `Code of Conduct <https://wiki.archlinux.org/index.php/Code_of_conduct>`_ before
contributing, to understand what actions will and will not be tolerated.

Read our `contributing guide <CONTRIBUTING.rst>`_ to learn more about how to provide fixes or improvements for the code
base.

Discussion around archiso takes place on the `arch-releng mailing list
<https://lists.archlinux.org/listinfo/arch-releng>`_ and in `#archlinux-releng
<ircs://chat.freenode.net/archlinux-releng>`_ on `freenode.net <https://freenode.net/>`_.

All past and present authors of archiso are listed in `AUTHORS <AUTHORS.rst>`_.

License
=======

Archiso is licensed under the terms of the **GPL-3.0-or-later** (see `LICENSE <LICENSE>`_).