Build Manjaro ISOs with buildiso
Prerequisites
Before we began. You need Kernel linux44 or newer.
It is recommend to download the latest version of Manjaro Distribution.
Install manjaro-tools-iso
To get started you need to download the following packages.
- manjaro-tools-base
- manjaro-tools-iso
- manjaro-efi-shell
- manjaro-isolinux
Install manjaro-iso-profiles
You will also need to download manjaro-iso-profiles from Package Manager.
There are three manjaro-iso-profiles packages to choose.
- manjaro-iso-profiles-official
- manjaro-iso-profiles-minimal
- manjaro-iso-profiles-community
You can choose any profiles you want.
We're going to choose manjaro-iso-profiles-official
along with XFCE to help you understand what you need to do.
We do not recommend downloading profiles from GitHub. It may not work for you while building. But, if it does work for you. That's fine.
Name your own Manjaro Distribution
Open Thunar Root and go to this file
/usr/share/manjaro-tools/isolinux/gfxboot.cfg
Find product=Manjaro Linux and change from Manjaro Linux to whatever you want to name it.
Example:
; Sections are read in the order given in base::layout, with section 'base' ; implicitly added at the end. If a config value is given more than once, ; the first entry wins. ; ; If a screen resolution can't be set, 640x480 is used as fallback (and ; section '640x480' added to the layout list). ; ; Setting livecd=1 implicitly adds section 'live' to the layout list. ; ; Color values: 24 bit RGB (e.g. 0xff0000 = red). ; [base] ; theme name theme=artwork-gfxboot ; product name product=NAME YOUR MANJARO DISTRIBUTION HERE ; other sections to read layout=800x600,live,install ; sound volume (0..100) volume=70 ; menu background transparency (0..255) menu.transparency=0x0 ; default font font.normal=16x16.fnt ; main menu font font.large=16x16.fnt ; max. visible main menu items mainmenu.entries=8 ; minimal main menu selection bar width mainmenu.bar.minwidth=300 ; main menu selection bar transparency (0..255) mainmenu.bar.transparency=0 ; main menu colors mainmenu.bar.color=0xffffff mainmenu.normal.fg=0xffffff mainmenu.selected.fg=0x000000 ; boot option colors bootopt.label.fg=0xffffff bootopt.text.fg=0xffffff ; progress bar color progress.bar.color=0x295202 ; menu colors menu.normal.bg=0xd8deed menu.normal.fg=0x000000 menu.normal.alt.fg=0x606060 menu.selected.bg=0x6c6c6c menu.selected.fg=0xffffff ; window colors window.bg=0xd8deed window.fg=0x000000 window.title.bg=0x217b05 window.title.fg=0xffffff window.title.error.bg=0xc00000 ; help system colors help.link.fg=0x0000a0 help.link.selected.fg=0xffffff help.link.selected.bg=0x0000a0 help.highlight.fg=0x009000 ; panel colors panel.fg=0xffffff panel.title.fg=0xffffff panel.f-key.fg=0xffe050 ; default keymap (e.g. de-latin1-nodeadkeys or cz-lat2-us) keymap= ; replace underscores ('_') with space in menu entries _2space=1 [800x600] ; screen size screen.size=800,600 ; background image background=back800x600.jpg ; upper left corner, if x = -1, center horizontally mainmenu.pos=-1,240 ; boot option input field position bootopt.pos=263,480 [640x480] ; screen size screen.size=640,480 ; background image background=back640x480.jpg ; upper left corner, if x = -1, center horizontally mainmenu.pos=-1,170 ; boot option input field position bootopt.pos=263,380 [live] ; show welcome animation welcome=1 ; set livecd flag livecd=1 ; main menu items where user can't add boot options nobootoptions=hdt,memtest ; move down one menu entry the first time an F-key is used autodown=0 ; F-key assignments, see install section for doc ; serial line setup (up to four lines) ; format: port,baud,dev ; - port: 0-3: first four BIOS serial lines (COM1-COM4); >=4: I/O port (0x3f8) ; - baud: baud rate (e.g. 115200); 0 = autodetect (considers baud rates >= 9600) ; - dev: linux device name (e.g. ttyS0) ; - all lines are set up with 8 bits, no parity, 1 stop bit ; - if the bootloader also has a serial line setup, the port is ; automatically used serial.line0=0,0,ttyS0 serial.line1=1,0,ttyS1 serial.line2= serial.line3= key.F2=lang key.F3=video key.F4=kernelopts key.F5= key.F6= key.F7= key.F8= key.F11= key.F12= ; show keymap menu as submenu in lang dialog keymap.submenu=1 ; add 'keytable' option with current keymap addopt.keytable=1 ; add 'lang' option with current locale addopt.lang=1 ; add 'layout' option with current keyboad layout addopt.layout=1
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 lrwxr-xr-x 1 28 16 feb 19:52 mkinitcpio.conf -> ../../shared/mkinitcpio.conf -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.
- mkinitcpio.conf holds the information of all needed kernel modules.
- 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: xfce-overlay, profile.conf, Packages-Xfce:
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
<?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/official/xfce/xfce-overlay/
Then create usr/share/backgrounds
and place your Custom Wallpaper at this directory.
/usr/share/manjaro-tools/iso-profiles/official/xfce/xfce-overlay/usr/share/backgrounds/
profile.conf
########################################## ###### 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 xorg drivers # nonfree_xorg="true" # use plymouth; initcpio hook # plymouth_boot="true" # use pxe boot; initcpio hook # pxe_boot="true" ################ install ################ # unset defaults to given value # efi_boot_loader="grub" # set uefi partition size # efi_part_size=32M # unset defaults to given value # plymouth_theme=manjaro-elegant # unset defaults to given values # names must match systemd service names start_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 # start_openrc=('acpid' 'bluetooth' 'cgmanager' 'consolekit' 'cronie' 'cupsd' 'dbus' 'syslog-ng' 'NetworkManager') # disable_openrc=('pacman-init') ################# livecd ################# # unset defaults to given value # hostname="manjaro" # unset defaults to given value # username="manjaro" # unset defaults to given value # password="manjaro" # 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 start_systemd array don't need to be listed here # start_systemd_live=('manjaro-live' 'mhwd-live' 'pacman-init') # unset defaults to given values, # names must match openrc service names # services in start_openrc array don't need to be listed here # start_openrc_live=('manjaro-live' 'mhwd-live' 'pacman-init')
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 theplaymouth
package in your package list.pxe_boot=
activates PXE boot on your system.kernel=
lets you set the installed kernel. Do not include any kernels in your package list! This setting is all you need.start_systemd=
let's you set systemd services, which get started on the installed system and on the livecd. A similar setting is available for OpenRC.
Packages-Xfce
###################################################### ### THIS FILE WILL INCLUDE shared/Packages-Desktop ### ###################################################### ## XFCE Main Packages ffmpegthumbnailer gconf # fix qt-theme gnome-keyring # fix wlan segfault gufw # firewall accountsservice lightdm-gtk-greeter lightdm-gtk-greeter-settings light-locker manjaro-settings-manager menulibre mugshot network-manager-applet networkmanager-openconnect networkmanager-openvpn networkmanager-pptp networkmanager-vpnc orage #plank poppler-glib thunar-archive-plugin thunar-media-tags-plugin xcursor-simpleandsoft xcursor-vanilla-dmz-aa xcursor-menda xfce4 libgsf # support ODF and libopenraw # RAW thumbnailing #xscreensaver git openssh ## XFCE Extra Packages xfce4-artwork xfce4-battery-plugin xfce4-clipman-plugin xfce4-cpufreq-plugin xfce4-cpugraph-plugin #xfce4-datetime-plugin xfce4-dict xfce4-diskperf-plugin xfce4-fsguard-plugin xfce4-genmon-plugin xfce4-mailwatch-plugin xfce4-mount-plugin xfce4-mpc-plugin xfce4-netload-plugin xfce4-notes-plugin xfce4-notifyd xfce4-screenshooter xfce4-sensors-plugin xfce4-smartbookmark-plugin xfce4-systemload-plugin xfce4-taskmanager xfce4-time-out-plugin xfce4-timer-plugin xfce4-verve-plugin xfce4-wavelan-plugin xfce4-weather-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin ## Applications catfish # needed for desktop search engrampa-thunar-plugin firefox-gtk2 galculator-gtk2 gimp gksu gnome-vfs gparted guayadeque gvfs gvfs-afc gvfs-gphoto2 gvfs-mtp gvfs-smb hexchat manjaro-welcome #midori mlocate mousepad #parole pidgin #evince #raktpdf qpdfview qpdfview-djvu-plugin qpdfview-ps-plugin thunderbird viewnior vlc xfburn #xnoise yelp open-fuse-iso p7zip xorg-xkill ## Network netctl networkmanager networkmanager-dispatcher-ntpd openresolv blueman #samba #thunar-shares-plugin-manjaro ## Artwork menda-circle-icon-theme faenza-green-icon-theme gtk-theme-ceti menda-themes menda-themes-dark gnome-themes-standard manjaro-artwork xfce-theme-greenbird plymouth-theme-manjaro-elegant xfce4-weather-plugin-menda-circle-icons ## Packages for Sound and Audio gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly gstreamer0.10-bad-plugins gstreamer0.10-base-plugins gstreamer0.10-good-plugins gstreamer0.10-ugly-plugins flashplugin libdvdcss manjaro-alsa manjaro-pulse pavucontrol pa-applet pulseaudio-bluetooth pulseaudio-ctl pulseaudio-zeroconf ## Package management pamac ## Games steam-manjaro ## Fonts #adobe-source-sans-pro-fonts cantarell-fonts ## Java jre8-openjdk jre8-openjdk-headless icedtea-web ## Printing manjaro-printer ## Office #abiword #gnumeric libreoffice-still ## AUR Access autoconf automake binutils bison fakeroot flex gcc >multilib gcc-multilib libtool m4 make patch subversion yaourt ## Documentation manjaro-documentation manjaro-xfce-settings manjaro-backgrounds
This file contains a list of packages, which will get installed on your installed ISO (XFCE) and the LiveCD. 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 the right pacman-XXXXX.conf
file in /usr/share/manjaro-tools/
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
Additionally, a userconfig manjaro-tools.conf
file can be placed in your home directory here:
~/.config/manjaro-tools/manjaro-tools.conf
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
Open Terminal and enter this command to Root Terminal.
su
Navigate to manjaro-tools
folder:
cd /usr/share/manjaro-tools/
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 -p xfce -a i686 -b stable
-a
let's you build for other architectures. Here, it builds a 32bit ISO image on a 64bit host system. You can also set this in yourmanjaro-tools.conf
file.-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/xfce/
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.
Further Reading
There is a dedicated forum subsection about Manjaro-Tools and buildiso:
Here are some more tutorials of manjaro-tools and buildiso:
- manjaro-tools on GitHub (always up to date)
- Manjaro-tools (outdated)
- How to create your own Manjaro spin with Manjaro-Tools?
- Building Manjaro by Spatry (Tutorial Video)
- 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