Building the installer
The installer used in ALG is calamares. Calamares is a distribution independent operating system installer framework. It's written in C++/Qt. This document will show you how to setup calamares. Calamares has a comprehensive guide on it's wiki.
Building Calamares​
Calamares needs to be compiled(built). Calamares can be built in the following steps. More details can be found on the calamares wiki, linked above.
$ git clone https://github.com/calamares/calamares.git
$ mkdir calamares/build
$ cd calamares/build
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
$ make
Calamares can then be run either of the following ways
$ ./calamares -d
$ sudo ./calamares -d
$ pkexec ./calamares -d
Packaging calamares for ALG​
In order to be used by the Arch Build System, calamares needs to be packaged. A package is a precompiled binary, that can be put on a repository and downloaded when building the ISO.
Get the PKGBUILD file​
The PKGBUILD file used for calamares in ALG is shown below. Copy & save it in a file named PKGBUILD
.
#calamares PKGBUILD for Arch Linux GUI
pkgname=calamares
pkgver=3.2.61
pkgrel=1
pkgdesc='Distribution-independent installer framework'
arch=('x86_64')
license=(GPL)
url="https://github.com/calamares/calamares/releases/download"
license=('LGPL')
depends=('kconfig' 'kcoreaddons' 'kiconthemes' 'ki18n' 'kio' 'solid' 'yaml-cpp' 'kpmcore' 'mkinitcpio-openswap'
'boost-libs' 'ckbcomp' 'hwinfo' 'qt5-svg' 'polkit-qt5' 'gtk-update-icon-cache' 'plasma-framework'
'qt5-xmlpatterns' 'squashfs-tools' 'libpwquality' 'boost') # 'pythonqt>=3.2')
makedepends=('extra-cmake-modules' 'qt5-tools' 'qt5-translations' 'git' 'boost')
backup=('usr/share/calamares/modules/bootloader.conf'
'usr/share/calamares/modules/displaymanager.conf'
'usr/share/calamares/modules/initcpio.conf'
'usr/share/calamares/modules/unpackfs.conf')
source=("$pkgname-$pkgver-$pkgrel.tar.gz::$url/v$pkgver/calamares-$pkgver.tar.gz")
sha256sums=('9ec6c49f4e2316cd3058d402c2ab65efff02e3f09a0028d50f0359e5154e6c8c')
prepare() {
cd ${srcdir}/calamares-${pkgver}
sed -i -e 's/"Install configuration files" OFF/"Install configuration files" ON/' CMakeLists.txt
sed -i -e 's/# DEBUG_FILESYSTEMS/DEBUG_FILESYSTEMS/' "$srcdir/${pkgname}-${pkgver}/CMakeLists.txt"
# modify desktop file
sed -i -e 's#Exec=sh.*#Exec=sh -c "/etc/calamares/launch.sh"#g' "$srcdir/${pkgname}-${pkgver}/calamares.desktop"
sed -i -e 's#Name=.*#Name=Install Arch Linux#g' "$srcdir/${pkgname}-${pkgver}/calamares.desktop"
sed -i -e 's#GenericName=.*#GenericName=Arch Linux Installer#g' "$srcdir/${pkgname}-${pkgver}/calamares.desktop"
sed -i -e 's#Icon=.*#Icon=archlinux-logo#g' "$srcdir/${pkgname}-${pkgver}/calamares.desktop"
sed -i -e 's#Comment=.*#Comment=Arch Linux Installer#g' "$srcdir/${pkgname}-${pkgver}/calamares.desktop"
# patches here
# change version
_ver="$(cat CMakeLists.txt | grep -m3 -e " VERSION" | grep -o "[[:digit:]]*" | xargs | sed s'/ /./g')"
printf 'Version: %s-%s' "${_ver}" "${pkgrel}"
sed -i -e "s|\${CALAMARES_VERSION_MAJOR}.\${CALAMARES_VERSION_MINOR}.\${CALAMARES_VERSION_PATCH}|${_ver}-${pkgrel}|g" CMakeLists.txt
sed -i -e "s|CALAMARES_VERSION_RC 1|CALAMARES_VERSION_RC 0|g" CMakeLists.txt
}
build() {
cd ${srcdir}/calamares-${pkgver}
mkdir -p build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib \
-DWITH_PYTHONQT:BOOL=ON \
-DBoost_NO_BOOST_CMAKE=ON \
-DSKIP_MODULES="tracking webview interactiveterminal initramfs \
initramfscfg dracut dracutlukscfg \
dummyprocess dummypython dummycpp \
dummypythonqt services-openrc"
make
}
package() {
cd ${srcdir}/calamares-${pkgver}/build
make DESTDIR="$pkgdir" install
}
Making the calamares package​
In order to make the calamares package for ALG, install the following packages:
sudo pacman -Sy yaml-cpp kpmcore hwinfo qt5-xmlpatterns libpwquality qt5-translations extra-cmake-modules squashfs-tools boost
The following packages are in the AUR. You can install them with yay or paru.
paru -S mkinitcpio-openswap ckbcomp
You can skip installing required packages manually and directly install them while building​
AUR packages might not install this way
Make sure you run the following command in the directory containing the PKGBUILD.
makepkg -sc
Make compilation faster​
Make compilation faster by using all CPU threads availble on host system. In makepkg.conf allocate all cores like this. Make sure you uncomment MAKEFLAGS
.
MAKEFLAGS="-j$(nproc)"
Undertand the yield​
Once compilation is done, makepkg will yield the package itself and some other files. A package should be a tarball in .zstd format. You should see something like:
pkgname-pkgver-pkgrel-arch-pkg.tar.zst
calamares-3.2.61-1-x86_64.pkg.tar.zst
The pkg
folder contains the uncompressed tarball and src
contains the cloned repository. Make sure you cleanup this folder when making a new package. This package can be deployed on any repository.