Build Manjaro ISOs with buildiso
Prerequisites
Before we begin. You need Kernel linux419 or newer.
It is recommend to download and install the latest version of Manjaro.
Install manjaro-tools-iso
To get started you need to the following meta-package.
sudo pacman -Syu manjaro-tools
Accept the defaults and you will get the following packages installed
- manjaro-tools-base
- manjaro-tools-iso
- manjaro-tools-pkg
- manjaro-tools-yaml
- manjaro-tools-iso-profiles-community
- manjaro-tools-iso-profiles-official
- sonar-iso-profiles
You will need all above packages - maybe except for `sonar-iso-profiles` which is a special branch for impaired people. If you want to exclude that package - enter 1-6 when asked for selection.
We're going to choose manjaro-iso-profiles-official
along with XFCE to help you understand what you need to do.
ISO profile
ISO profile overview
Open Thunar Root and go to this directory.
/usr/share/manjaro-tools/iso-profiles/manjaro/xfce
Let's take a closer look at the XFCE profile folder (marked above):
~ >>> ls -lAgo /usr/share/manjaro-tools/iso-profiles/manjaro/xfce drwxr-xr-x 3 4096 16 feb 19:52 desktop-overlay lrwxr-xr-x 1 33 16 feb 19:52 live-overlay -> ../../shared/manjaro/live-overlay -rw-r--r-- 1 5115 16 feb 19:52 Packages-Desktop lrwxr-xr-x 1 26 16 feb 19:52 Packages-Live -> ../../shared/Packages-Live lrwxr-xr-x 1 26 16 feb 19:52 Packages-Mhwd -> ../../shared/Packages-Mhwd lrwxr-xr-x 1 26 16 feb 19:52 Packages-Root -> ../../shared/Packages-Root -rw-r--r-- 1 2400 16 feb 19:52 profile.conf
- desktop-overlay: After every successful installation of your ISO the files and folders in here will get copied over.
- live-overlay: Similar to desktop-overlay. Files and folders in here will only get copied over to the LiveCD of your ISO.
- Packages-Desktop: This file contains packages for the ISO installation. All packages will also get installed on LiveCDs.
- Packages-Live: This file contains packages, which will only get installed on the LiveCD.
- Packages-Mhwd: This file contains Mhwd packages important to all Manjaro installations and LiveCDs.
- Packages-Root: This file contains base packages important to all Manjaro installations and LiveCDs.
- profile.conf contains basic settings for your ISO installation and LiveCD.
As you have probably noticed, all files and folders are readonly and several are only symlinks to the shared
ISO profile. It is good practice to never change files or folders in the shared
ISO profile. If you ever want to change them, first copy them to your ISO profile folder and delete the symlink.
All folders and files specific to your ISO are in bold. You can change them to your liking.
Modifying an ISO profile
The most common places to tweak and customize an ISO profile are the 3 folders marked above: desktop-overlay, profile.conf, Packages-Desktop:
desktop-overlay
The desktop-overlay folder looks like this:
~ >>> tree /usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/etc /usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/etc ├── fonts │ └── conf.d │ └── 70-no-bitmaps.conf -> /etc/fonts/conf.avail/70-no-bitmaps.conf └── lightdm └── lightdm-gtk-greeter.conf
3 directories, 2 files
Go to this directory.
/usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/etc/
Then create skel folder. This is where you can clone everything you see on your Desktop Screen to ISO.
After the ISO has been successfully installed all files and folder in desktop-overlay folder get copied over to the installed system. This includes settings/config files but also themes and backgrounds/pictures.
All files and folder in here will get copied to the home folder. Most hidden files and their structure in /usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/etc/skel/
should be already familiar to you, because your home folder looks very similar.
Clone Custom Wallpaper Desktop
To clone your Custom Wallpaper Desktop. Open a New File Manager and go to this file.
/home/<username>/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
Change all image directories to where your Custom Wallpaper was located at.
/usr/share/backgrounds/<YOUR IMAGE HERE>
Example
A sample `xfce4-desktop.xml` can be viewed by unfolding this block
<?xml version="1.0" encoding="UTF-8"?> <channel name="xfce4-desktop" version="1.0"> <property name="backdrop" type="empty"> <property name="screen0" type="empty"> <property name="monitor0" type="empty"> <property name="image-path" type="string" value="'''/usr/share/backgrounds/<YOUR IMAGE HERE>'''"/> <property name="last-image" type="string" value="'''/usr/share/backgrounds/<YOUR IMAGE HERE>'''"/> <property name="last-single-image" type="string" value="'''/usr/share/backgrounds/<YOUR IMAGE HERE>'''"/> <property name="image-style" type="int" value="5"/> </property> <property name="monitorVGA-0" type="empty"> <property name="workspace0" type="empty"> <property name="color-style" type="int" value="0"/> <property name="image-style" type="int" value="5"/> <property name="last-image" type="string" value="'''/usr/share/backgrounds/<YOUR IMAGE HERE>'''"/> </property> <property name="workspace1" type="empty"> <property name="color-style" type="int" value="0"/> <property name="image-style" type="int" value="5"/> <property name="last-image" type="string" value="'''/usr/share/backgrounds/<YOUR IMAGE HERE>'''"/> </property> </property> </property> </property> <property name="desktop-icons" type="empty"> <property name="style" type="int" value="2"/> <property name="file-icons" type="empty"> <property name="show-removable" type="bool" value="true"/> </property> <property name="icon-size" type="uint" value="32"/> </property> </channel>
Go to this directory in Thunar Root.
/usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/
Then create usr/share/backgrounds
and place your Custom Wallpaper at this directory.
/usr/share/manjaro-tools/iso-profiles/manjaro/xfce/desktop-overlay/usr/share/backgrounds/
profile.conf
The full content of the file can be viewed by unfolding this block
########################################## ###### use this file in the profile ###### ########################################## # use multilib packages; x86_64 only # multilib="true" displaymanager="lightdm" # Set to false to disable autologin in the livecd # autologin="true" # nonfree mhwd drivers # nonfree_mhwd="true" # use plymouth; initcpio hook plymouth_boot="false" # use pxe boot; initcpio hook pxe_boot="false" # use core packages as defined in pkglist to use in basic profile # basic="false" # use extra packages as defined in pkglist to activate a full profile extra="true" ################ install ################ # unset defaults to given value # efi_boot_loader="grub" # configure calamares for netinstall # netinstall="false" # the default url for the netinstall.yaml # netgroups="https://raw.githubusercontent.com/manjaro/iso-profiles/master/shared/netgroups" # configure calamares to use chrootcfg instead of unpackfs # chrootcfg="false" # use geoip for localization # geoip='true' # unset defaults to given values # names must match systemd service names enable_systemd=('avahi-daemon' 'bluetooth' 'cronie' 'ModemManager' 'NetworkManager' 'org.cups.cupsd' 'tlp' 'tlp-sleep') disable_systemd=('pacman-init') # unset defaults to given values, # names must match openrc service names # enable_openrc=('acpid' 'bluetooth' 'cgmanager' 'consolekit' 'cronie' 'cupsd' 'dbus' 'syslog-ng' 'NetworkManager') # disable_openrc=() # the same workgroup name if samba is used # smb_workgroup="" ################# livecd ################# # unset defaults to given value # hostname="manjaro" # unset defaults to given value # username="manjaro" # unset defaults to given value # password="manjaro" # the login shell # defaults to bash # login_shell=/bin/bash # unset defaults to given values # addgroups="video,audio,power,disk,storage,optical,network,lp,scanner,wheel" # unset defaults to given values # names must match systemd service names # services in enable_systemd array don't need to be listed here # enable_systemd_live=('manjaro-live' 'mhwd-live' 'pacman-init' 'mirrors-live-net') # unset defaults to given values, # names must match openrc service names # services in enable_openrc array don't need to be listed here # enable_openrc_live=('manjaro-live' 'mhwd-live' 'pacman-init' 'mirrors-live-net')
This config file contains setting options. All default settings are commented. If you want to change them, uncomment them (remove the #
symbol in front) and change it.
The following settings are noteworthy:
initsys=
lets you choose between systemd and OpenRC. This setting is associated with the>systemd
and>openrc
flags in your package lists.multilib=
setting belongs to the>multilib
flag in your package lists. multilib will install basic 32bit libraries on 64bit systems. This increases compatibility for 32bit applications on 64bit systems.displaymanager=
sets the display / login manager your system uses. You need to list your display manager in your package list, too.nonfree_xorg=
refers to proprietary graphics drivers.plymouth_boot=
lets you activate Plymouth (the graphics displayed during boot). Do not forget theplymouth
package in your package list.pxe_boot=
activates PXE boot on your system. Since manjaro-tools 15.1, PXE is enabled by default and this flag is no longer needed.
netinstall=
activates an additional package selection in calamares. These packages will be downloaded and installed during the installation of the ISO (besides the packages in Packages-Desktop and Packages-Xfce). The list of packages gets chosen from this Github repository according to your ISO profile. Look for a file calledpackages-systemd.yaml
.
chrootcfg=
: If bothnetinstall=true
andchrootcfg=true
are set, the ISO will become a pure net install. This means that no packages from Packages-Desktop, Packages-Xfce, Packages-Mhwd, and Packages-Root will get installed during installation. Instead, Calamares offers a comfortable selection screen, where all packages (to be downloaded from a Manjaro mirror and installed on your system) can be selected. Please refer to the following guide for more detailed instructions: Build Manjaro Net-Install
kernel=
lets you set the installed kernel. Do not include any kernels in your package list! This setting is all you need.enable_systemd=
let's you set systemd services, which get started on the installed system (and with a similar setting on the livecd). A similar setting is available for OpenRC.
Packages-Desktop
The default `Packages-Desktop` file can be viewed by unfolding this block
## Network >systemd avahi >openrc avahi-openrc >systemd networkmanager >openrc networkmanager-openrc >openrc networkmanager-consolekit networkmanager-openconnect networkmanager-openvpn networkmanager-pptp networkmanager-vpnc networkmanager-dispatcher-ntpd nss-mdns # NSS support for mDNS (optdepend for avahi) >systemd ntp >openrc ntp-openrc mobile-broadband-provider-info modemmanager >systemd openresolv >systemd openssh >openrc openssh-openrc samba ## Libraries for Sound/Audio/Video alsa-firmware >systemd alsa-utils >openrc alsa-utils-openrc ffmpeg gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly libdvdcss >multilib manjaro-alsa >systemd manjaro-pulse >systemd pulseaudio-bluetooth >systemd pulseaudio-ctl >systemd pulseaudio-zeroconf ## Connect Packages android-tools android-udev gvfs gvfs-afc gvfs-gphoto2 gvfs-mtp gvfs-nfs gvfs-smb mtpfs udiskie udisks2 ## AUR Support/Development # Missing base-devel packages autoconf automake binutils bison fakeroot flex gcc >multilib gcc-multilib libtool m4 make patch pkg-config >multilib lib32-flex # Extra packages for AUR support >extra git >extra patchutils >extra subversion yaourt ## Fonts cantarell-fonts # noto-fonts # default font # noto-fonts-cjk # big package, ~76 mb compressed # >extra noto-fonts-emoji >extra terminus-font >extra ttf-bitstream-vera # ttf-dejavu # Installed as gnome-themes-standard dependency >extra ttf-inconsolata >extra ttf-indic-otf >extra ttf-liberation >extra ttf-droid ## Games >extra steam-manjaro ## Package management pamac ## Java >extra jdk8-openjdk >extra jre8-openjdk-headless >extra jre8-openjdk ## Printing >extra cups >extra cups-pdf >extra cups-pk-helper >extra ghostscript >extra gsfonts >extra hplip >extra splix ## Optional dependencies for hplip >extra pyqt5-common # For hplip >extra python-pillow # For hplip >extra python-pip # For hplip >extra python-pyqt5 # For hplip gui >extra python-reportlab # For hplip ## Display manager lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings accountsservice # Enhanced user accounts handling ## XFCE Group exo garcon gtk-xfce-engine thunar thunar-volman tumbler xfce4-appfinder xfce4-panel xfce4-power-manager xfce4-session xfce4-settings xfce4-terminal xfconf xfdesktop xfwm4 xfwm4-themes ## XFCE Extras blueman ffmpegthumbnailer # tumbler - for video thumbnails freetype2 # tumbler - for font thumbnails gconf # fix qt-theme gksu gnome-keyring # fix wlan segfault libgsf # tumbler - for ODF thumbnails libopenraw # tumbler - for RAW thumbnails light-locker network-manager-applet menulibre orage poppler-glib # tumbler - for PDF thumbnails thunar-archive-plugin thunar-media-tags-plugin # >extra xfce4-artwork xfce4-battery-plugin xfce4-clipman-plugin >extra xfce4-cpufreq-plugin >extra xfce4-cpugraph-plugin # xfce4-datetime-plugin >extra xfce4-dict >extra xfce4-diskperf-plugin >extra xfce4-fsguard-plugin >extra xfce4-genmon-plugin >extra xfce4-mailwatch-plugin >extra xfce4-mount-plugin >extra xfce4-mpc-plugin >extra xfce4-netload-plugin >extra xfce4-notes-plugin xfce4-notifyd xfce4-screenshooter >extra xfce4-sensors-plugin >extra xfce4-smartbookmark-plugin >extra xfce4-systemload-plugin xfce4-taskmanager >extra xfce4-time-out-plugin >extra xfce4-timer-plugin >extra xfce4-verve-plugin >extra xfce4-wavelan-plugin >extra xfce4-weather-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin >systemd pa-applet >systemd pavucontrol ## Themes QT/GTK/SDDM >extra manjaro-backgrounds gnome-icon-theme gnome-themes-standard gtk-theme-breath >systemd plymouth-legacy >systemd plymouth-theme-manjaro-elegant xcursor-simpleandsoft xcursor-vanilla-dmz-aa ## Applications >extra catfish dmidecode # optional dependency inxi engrampa engrampa-thunar-plugin >extra firefox >extra flashplugin >extra galculator-gtk2 >extra gimp gparted gufw >extra guayadeque >extra hexchat htop qpdfview >extra qpdfview-djvu-plugin >extra qpdfview-ps-plugin inxi >extra libreoffice-still manjaro-hello manjaro-settings-manager manjaro-settings-manager-notifier >basic midori >extra mlocate mousepad mugshot parole # media player >extra pidgin powertop >extra poppler-data # CKJ support for pdf >basic sylpheed # mail client >extra thunderbird # vlc-nightly >extra viewnior >extra xfburn >extra yelp # Optional dependencies engrampa p7zip # 7Z and ARJ archive support unace # ACE archive support unrar # RAR archive support ## Documentation manjaro-documentation ## Settings packages >extra manjaro-xfce-settings >basic manjaro-xfce-minimal-settings manjaro-browser-settings ## Xorg Input Drivers xf86-input-elographics xf86-input-evdev xf86-input-keyboard xf86-input-libinput xf86-input-mouse xf86-input-void ## Xorg Server and Graphics numlockx mesa-demos >multilib lib32-mesa-demos xorg-server xorg-server-utils xorg-twm xorg-utils xorg-xinit xorg-xkill ## Desktop Utils perl-file-mimeinfo xdg-user-dirs xdg-utils xdg-su ## Misc >openrc consolekit-openrc >openrc displaymanager-openrc >openrc pm-utils >openrc cgmanager-openrc manjaro-hotfixes
This file contains a list of packages, which will get installed on your installed ISO (XFCE) and the LiveCD (the packages in Packages-Live file only get installled on the live ISO). This is a package list with Xfce specific packages (and packages you like to add to your custom Manjaro ISO) of multiple package lists in your ISO profile. The other package lists are more generic.
You can add or remove package names from this list as you like. You do not need to worry about dependencies when adding package names, just make sure the package name is spelled correctly and the package is available in the Manjaro repositories.
#
marks a comment. The rest of the line after the #
symbol gets ignored.
>i686
is a flag and marks a package, which will only get installed on the 32bit version of your ISO (XFCE).
>x86_64
marks a package, which will only get installed on the 64bit version of your ISO (XFCE).
Adding AUR packages
If you want to add AUR packages to your ISO, you need to create a online repository and add it to a file ${profile_dir}/user-repos.conf beside your profile.conf.
[your-repo-name] SigLevel = Optional TrustAll Server = http://repo.server.tld/your-repo-name
manjaro-tools.conf
manjaro-tools.conf
is the central configuration file for all tools part of manjaro-tools. Only edit the general and the "buildiso" part to not exceed the scope of this tutorial. If you are not sure what and how to edit it, do not edit it. You can always use arguments with the buildiso
command later.
By default, the systemwide config file is installed in
/etc/manjaro-tools/manjaro-tools.conf
Best practice is to leave the systemwide file untouched and copy the system wide config to your home directory here:
~/.config/manjaro-tools
If the userconfig is present, manjaro-tools/buildiso will load the userconfig values, however, if variables have been set in the systemwide config file, these values take precedence over the userconfig. Best practice is to leave the systemwide file untouched. By default it is commented and shows just initialization values done in code.
Build your ISO
Build your ISO with the following command:
buildiso -p xfce
You need to specify the name of your ISO profile after the -p
argument. In this case, it is xfce
.
If the build process fails with an error, start it again.
Attention: The build process needs at least 10 minutes to complete or much longer when you are using HDDs, slow CPUs, or large ISOs.
When the build process finishes successfully, the ISO file and the package list will appear in this folder:
/var/cache/manjaro-tools/iso/
Example:
You can use arguments with the buildiso
command for more build options:
buildiso -f -p xfce -b stable
-f
let's you specify if you want the full ISO. If omitted a minimal ISO will be build.-b
let's you specify the branch. You can also set this in yourmanjaro-tools.conf
file.
You can find other examples of builds using different arguments for buildiso here.
Cleaning your hard drive
After a successful or failed build, you can get rid of most data (the "raw" ISO with all downloaded packages) by deleting this folder:
sudo rm -r /var/lib/manjaro-tools/buildiso/
To clean your system of packages files of packages not installed on your system (this includes all the package files downloaded for your custom ISO):
paccache -ruk0
You can also manually look into
/var/cache/manjaro-tools/
and delete folders or files to your liking. If you want to delete all ISO images, package lists, and cached Xorg packages do:
sudo rm -r /var/cache/manjaro-tools/
Please remember that all these packages and files are saved for your convenience. If you clean your system like suggested above, you have to download all packages and build all images again the next time you want to build your own Manjaro ISO.
By default, your manjaro-tools.conf
file is saved. If you want to delete it, use
rm -r ~/.config/manjaro-tools
Further Reading
Tutorials for manjaro-tools and buildiso
- Source: 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 KDE Minimal
- Build Manjaro Net-Install
Manjaro-tools (outdated)
- Support for Manjaro-Tools (outdated)
- Simple buildiso tutorial (outdated)
- How to use Manjaro-Tools (outdated)
- Buildiso with AUR packages: Using buildpkg (outdated)
- Buildiso with AUR packages: Using yaourt (outdated)
It is also possible to ask questions on IRC:
- Server:
irc.freenode.net
- Channel:
#manjaro