Build Manjaro Net-Install

From Manjaro Linux
Jump to: navigation, search

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.

Prerequisites

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-Desktop file 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.conf file as described Build Manjaro ISOs with buildiso#profile.conf:
    • netinstall="true"
    • chrootcfg="true"
  • All packages present in a file called chrootcfg-systemd.yaml or chrootcfg-openrc.yaml can 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.

chrootcfg-systemd.yaml

This file is located in this Github repository. Pull requests are generally accepted. Current maintainers of Manjaro community editions should have direct access, too.

Example file

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.yaml file. 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!

Test your chrootcfg-systemd.yaml file before uploading it to the above linked Github repository in the following way:

1. Boot the previously created ISO image
2. Edit /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 /home/manjaro/chrootcfg-systemd.yaml file.

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.

Links