Build Manjaro Net-Install
This tutorial teaches how to build an ISO image, which does a Manjaro Net-Install using Calamares. A net-install downloads all packages from the internet and installs them locally. In contrast, all packages on Manjaro ISOs prior to Manjaro 17.0 got installed to the user's hardware from the ISO image.
For creating a Manjaro Net-Install, you first need to create an ISO image as described in Build Manjaro ISOs with buildiso. Four things are essential:
- Calamares needs to be present on the ISO, e.g. in the
Packages-Desktopfile as described Build Manjaro ISOs with buildiso#Packages-Desktop.
- The user needs to be able to start Calamares or it needs to be started and displayed automatically
- The following options need to be enabled in the
profile.conffile as described Build Manjaro ISOs with buildiso#profile.conf:
- All packages present in a file called
chrootcfg-openrc.yamlcan be selected within Calamares by the user for download and installation.
Please keep in mind that a net-install only installs packages on the host system. It is not possible to copy files from the ISO image to the host system. If you want to include setting files (e.g. such as in
~/.config/) or other files (such as wallpaper), you have to create a package in the Manjaro repositories.
In the example
chrootcfg-systemd.yaml file below, such files are included in a package called
manjaro-lxqt-basic-settings. Look at its PKGBUILD file and content files in order to learn how to create such a package.
This file is located in this Github repository. Pull requests are generally accepted. Current maintainers of Manjaro community editions should have direct access, too.
The chrootcfg-systemd.yaml file from Manjaro LXQt:
The full content of the file can be viewed by unfolding this block
- name: "manjaro" description: "Base system" hidden: false critical: true subgroups: - name: "base" # 'base' package group from arch linux, except for last 3 packages description: "Manjaro command line interface" hidden: false selected: true critical: true packages: - bash - bzip2 - coreutils - cryptsetup - device-mapper - dhcpcd - diffutils - e2fsprogs - file - filesystem - findutils - gawk - gcc-libs - gettext - glibc - grep - gzip - inetutils - iproute2 - iputils - jfsutils - less - licenses - logrotate - lvm2 - man-db - man-pages - mdadm - nano - netctl - pacman - pciutils - pcmciautils - perl - procps-ng - psmisc - reiserfsprogs - s-nail - sed - shadow - sysfsutils - systemd-sysvcompat - tar - texinfo - usbutils - util-linux - vi - which - xfsprogs - manjaro-system # manjaro-specific - mhwd # manjaro-specific - sudo # essential package from 'base-devel' group - name: "kernel" description: "Kernel" hidden: true selected: true critical: true packages: - linux49 # currently only kernel verion from manjaro-tools.conf is supported! --> do not give user a choice! - name: "boot" description: "GRUB boot loader" hidden: false selected: true critical: true packages: # these packages are also managed by calamares --> user can break installation! - grub - os-prober - memtest86+ - efibootmgr - intel-ucode - name: "system" description: "Basic Manjaro system" hidden: false selected: true critical: true packages: - acpid - cronie - tlp - cpupower - manjaro-release - manjaro-hotfixes - name: "network" description: "Minimal network functionality" hidden: false selected: true critical: true packages: - networkmanager - name: "network-extra" description: "Packages, which extend the network functionality" hidden: false selected: false critical: true packages: - rp-pppoe - networkmanager-openconnect - networkmanager-openvpn - networkmanager-pptp - networkmanager-vpnc - avahi - ntp - rsync - bluez - dhclient - openresolv - dnsmasq - openssh - mobile-broadband-provider-info - modemmanager - nss-mdns - tcp-wrappers - name: "base-devel" description: "AUR support with Yaourt" hidden: false selected: false critical: true packages: # 'base-devel' packages from arch linux (minus duplicate packages) and yaourt - autoconf - automake - binutils - bison - fakeroot - flex - gcc - groff - libtool - m4 - make - patch - pkg-config - yaourt - name: "firmware" description: "Additional firmware support" hidden: false selected: false critical: true packages: - bluez-firmware - alsa-firmware - b43-fwcutter - ipw2100-fw - ipw2200-fw - zd1211-firmware - manjaro-firmware - name: 'filesystems' description: 'Extra filesystems' hidden: false selected: false critical: true packages: - btrfs-progs - dosfstools # FAT16 and FAT32 - ecryptfs-utils - exfat-utils - f2fs-tools - nfs-utils - ntfs-3g - nilfs-utils - dmraid - name: "utilities" description: "CLI utilities" hidden: false selected: false critical: true packages: # user can break installation, if calamares tries to set zsh as default shell but zsh is not installed. - manjaro-tools-base # manjaro-chroot - zsh - acpi - haveged - alsa-utils - crda - powertop - dmidecode - inxi - ncdu - name: "desktop" description: "LXQt desktop" hidden: false critical: true subgroups: - name: "xorg" description: "Xorg display server" selected: false hidden: false critical: true packages: - xorg-server - xorg-server-utils - xorg-twm - xorg-utils - xorg-xinit - name: "displaymanager" description: "Display manager" selected: false hidden: false critical: true packages: - sddm - sddm-qt-manjaro-theme - name: "xdg-user-dirs" description: "User directories in $HOME folder" selected: false hidden: false critical: true packages: - xdg-su - xdg-user-dirs - xdg-utils - name: 'window-manager' description: 'Window manager - choose Openbox (and Compton) or kwin' selected: false hidden: false critical: true packages: - openbox - obconf-qt - compton - compton-conf - kwin - systemsettings - name: 'lxqt-basic' description: 'Basic LXQt desktop environment' selected: false hidden: false critical: true packages: - lxqt-about - lxqt-admin - lxqt-common - lxqt-config - lxqt-globalkeys - lxqt-notificationd - lxqt-openssh-askpass - lxqt-panel - lxqt-policykit - lxqt-powermanagement - lxqt-qtplugin - lxqt-runner - lxqt-session - lxqt-sudo - pcmanfm-qt - gvfs - qterminal - juffed-qt5 - octopi - octopi-notifier-qt5 - network-manager-applet - manjaro-lxqt-basic-settings - name: 'pcmanfm-qt-extra' description: 'Packages, which extend the functionality of Pcmanfm-qt file manager' selected: false hidden: false critical: true packages: - gvfs-afc - gvfs-gphoto2 - gvfs-mtp - gvfs-nfs - gvfs-smb - xarchiver - zip - unzip - p7zip - unrar - name: 'octopi-extra' description: 'Packages, which extend the functionality of Octopi package manager' selected: false hidden: false critical: true packages: - octopi-cachecleaner - octopi-pacmanhelper - octopi-repoeditor - pacmanlogviewer - name: 'audio-extra' description: 'Pulseaudio with advanced audio support' selected: false hidden: false critical: true packages: - pulseaudio - pulseaudio-bluetooth - pulseaudio-equalizer - pulseaudio-jack - pavucontrol-qt - name: 'manjaro-settings-manager' description: 'Offers easy driver, kernel, and language settings' selected: false hidden: false critical: true packages: - manjaro-settings-manager - manjaro-settings-manager-notifier - name: 'fonts-extra' description: 'Extra fonts' selected: false hidden: false critical: true packages: - terminus-font - ttf-bitstream-vera - ttf-dejavu - ttf-droid - ttf-inconsolata - ttf-indic-otf - ttf-liberation - noto-fonts - name: "programs" description: "Common programs" hidden: false critical: true subgroups: - name: "manjaro-hello" description: "Manjaro welcome screen for new Manjaro users" selected: false hidden: false critical: true packages: - manjaro-hello - name: "manjaro-documentation" description: "Manjaro user guide" selected: false hidden: false critical: true packages: - manjaro-documentation - name: 'manjaro-printer' description: 'Printing and printer configuration' selected: false hidden: false critical: true packages: - manjaro-printer - bluez-cups
Some things to consider
- There needs to be at least 1 group.
- Every group can have other groups as subgroups, defined by the keyword subgroups:.
- For every group, properties can be specified, such as:
- name: Contains a string with the name of the group. This string will be displayed by Calamares.
- description: Contains a string, which describes that group.
- selected (optional): Specifies, whether the entire group is selected by default or not. It is recommended to enable this property for at least essential packages.
- hidden (optional): Specifies, if the entire group is hidden in Calamares. This makes sense for the kernel and other essential packages, which break the installation when not selected.
- critical (optional): This can give more detailed error messages during the installation process within Calamares. It is recommended to have this option enabled, otherwise error messages in Calamares become very cryptic.
- packages: If this keyword is mentioned, a list of package names will follow. A mistake in a package name can cause Calamares to fail during the installation process.
- subgroups: If this keyword is mentioned, a list of groups will follow.
- Comments can be inserted with a # symbol
- Be extremely cautious with indentations and spaces/tabs within the entire
chrootcfg-systemd.yamlfile. If the indentation is not done exactly the same for all groups or packages within groups, the yaml parser will fail. Therefore, it is recommended to use exclusively spaces instead of tabs!
How to test chrootcfg-systemd.yaml
The yaml parser in Calamares is rather picky and easily fails. A failure of that parser means that Calamares cannot be started. Therefore, it is essential that the
chrootcfg-systemd.yaml file in the above linked Github repository is always error-free.
It is discouraged to upload an untested
chrootcfg-systemd.yaml file to Github!
chrootcfg-systemd.yaml file before uploading it to the above linked Github repository in the following way:
1. Boot the previously created ISO image
/etc/calamares/modules/netinstall.conf, and point the URL to a local
chrootcfg-systemd.yaml file in the home directory of the live system:
--- groupsUrl: file:///home/manjaro/chrootcfg-systemd.yaml
3. Create the file
/home/manjaro/chrootcfg-systemd.yaml. For example, it's content can be copied from the above mentioned example file.
4. Start Calamares on the live system in development mode with verbose output (including error messages) with the following command. If there is any error in the yaml parser, Calamares will fail to start and tell you the exact line of code (+/- 1 line) where it fails. Use this information to debug the
sudo calamares -d
5. When error-free, the yaml parser will not stop Calamares from starting. But even if Calamares starts, the yaml parser can still display the list of packages differently than you intended it to be. Please check that as well. When finished, copy and upload the
/home/manjaro/chrootcfg-systemd.yaml file to the above mentioned Github repository.
Alternatively, it is also possible to change the URL in step 2 to your own Github repository or any other location on the internet.
- manjaro-tools: Manjaro Gitlab (always up to date)
- Forum: How to create your own Manjaro spin with Manjaro-Tools
- Video: Building Manjaro by Spatry(Tutorial Video)
- Build Manjaro ISOs with buildiso
- Build KDE Minimal