Difficulty: ★★★☆☆
Install Manjaro using CLI only
This is how you install Manjaro using the terminal.
- On bare-metal use CtrlAltF4
- On VirtualBox use RightCtrlF4
This guide is intended as a reference for the basic installation abstracted by Calamares and for the subsequent installation of the packages which makes of the live ISO.
The guide can be applied as a virtual machine or hardware as of your choice.
Overview
- VirtualBox or Hardware
- Installation prerquisites
- Partitioning
- Formatting
- Mounting
- Base installation
- Base configuration
- Vconsole
- Locale
- Timezone
- Clock
- Hostname
- Sudo
- Network
- Time sync
- Root password
- Bootloader
- Init
- Bootloader
- Finalizing
- Recreate the live ISO
- Final Considerations
- Variations
1. Virtual machine or hardware
This guide is a generic guide targeted at UEFI based systems. If you test this using a virtual machine please use the recommended configuration for Manjaro VM.
- 2 VCPU
- 4 GB memory (depending in ISO size)
- 32 GB disk (this guide uses 128G disk)
- Enable EFI
- Graphics 128MB
For the best result download the most recent Manjaro ISO and write it to an USB or start a virtual machine with the ISO as selected boot media.
Please refer the topic Multiboot ISO USB on how to create a bootable USB using the ventoy project.
2. Installation prerquisites
Load the ISO to your system - virtual or bare-metal. When you have loaded the system be sure to set the following items.
- Keyboard
- System time
- Branch and mirror
- Pacman databases and keyrings
- Trust database (pacman keys)
If you used a GUI ISO you have initially selected your preferred keyboard and you can skip this step.
All commands assumes you are using a live Manjaro ISO and in terminal as the root user.
su
1. Keyboard
Set keyboard on Architect ISO by using loadkeys followed by a country code e.g. for Denmark
loadkeys dk
The available keymaps can be found by looking in the /usr/share/kbd/keymaps/ folder.
2. System time
Ensure system time is correct - necessary for SSL certificates
systemctl enable --now systemd-timesyncd
3. Mirror and branch
We use pacman-mirrors to set a mirror and the desired branch.
pacman-mirrors --api --set-branch unstable --url https://mirrors.manjaro.org/repo
You can replace the branch with stable or testing and you can remove the –url argument and use e.g. –continent for closer mirrors or leave it out for a complete run against all mirrors.
4. Database and keyrings
Download the databases and install keyrings
pacman -Syy archlinux-keyring manjaro-keyring
5. Trust database
Create trust database, populate and refresh keys
pacman-key --init
pacman-key --populate archlinux manjaro
pacman-key --refresh-keys
3. Partitioning disk
If you are using a system with multiple disk devices you need to make sure of you are targeting the right disk, so start with listing your devices. By doing this you will determine which device you want to target for the installation.
NOTE: All your disk devices will be listed - including your removable devices. Removable devices will have 1 in the RM column of the output.
List disk devices
List the devices using the command lsblk. Depending on your system your output may look like this
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 52.5M 1 loop /run/miso/sfs/livefs
loop0 7:1 0 501.3M 1 loop /run/miso/sfs/rootfs
sda 8:0 0 128G 0 disk
sr0 11:0 1 617.4M 0 rom /run/miso/bootmnt
Partition layout
We need to make a decision on how to partition our device.
A modern system uses EFI and requires a special partition to preload the system.
Depending on your system and the intended use you need to consider making room for swap. Swap space is a temporary storage location for memory shared by applications. If you are using integrated graphics (shared system memory) a swap partition of the same size as your RAM will do it.
A Manjaro system can run with a root partition of less than 10G but doing so will require strict dicipline and maintenance to avoid your system root from running full. A root partition of 32G-64G may be adequate for most use cases.
When deciding on the size of the root filesystem - be aware that using e.g. snap to install packages may fill up your root faster than anticipated.
Many experienced users like to setup partitions for different purposes. The only extra I will recommend here is a partition to hold the home folders.
This makes a total of 4 (four) partitions:
- efi - 300M - FAT32
- swap - 2G (or equal to system RAM size)
- an argument can be made to skip the swap partition and instead use a swapfile as a swapfile can be changed on the fly (please reference the Wiki article) and make an informed decision.
- root - 32G-64G
- home - remaining space
Create the partitions
The partitions can be created by script commands or you can use interactive console programs like fdisk or cfdisk. The programs is navigated by keys (arrows, letters, enter and esc) or you can script it using sfdisk.
From our example system listing above - our main disk device is labeled sda and for this guide we use cfdisk.
Note: This command uses the –zero argument to empty the partition table of the selected disk.
cfdisk --zero /dev/sda
Select gpt label type when prompted and press Enter
The cfdisk is a three part window
- Top: various device information
- Center: shows partition info
- Bottom: displays commands and a short description
There is two (2) block cursors
- object cursor
- action cursor
To do something you need to select an object and a command.
Create the partitions according the layout described above.
Be very careful to set the partition type exactly as described as we will let systemd mount the partitions according to partition type. You may expect us to later create a fstab file - surprise - we won’t - and you will learn something about Discoverable Partitions Specification
- EFI or $esp
- Select Free space using ↑ or ↓.
- Select New using ← or → → Enter.
- 300M press Enter.
- Select Type → Enter.
- Select EFI System → Enter.
- swap partition.
- Select Free space → New → Enter.
- Enter size 2G → Enter.
- Select Type → Enter.
- Select Linux swap → Enter.
- root partition.
- Select Free space → New &rarr Enter.
- Enter size 32G → Enter
- Select Type → Enter.
- Select Linux root (x86_64) → Enter.
- home partition.
- Select Free space → New → Enter.
- Enter to assign the remaining space to home.
- Select Type → Enter.
- Select Linux home → Enter.
- Save the changes
- Select Write → Enter
- Input yes when prompted → Enter
- Select Quit → Enter
4. Formatting
List your partitions and note that each partition is listed as part of our sda disk device.
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 52.5M 1 loop /run/miso/sfs/livefs
loop0 7:1 0 501.3M 1 loop /run/miso/sfs/rootfs
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 300M 0 part
├─sda2 8:2 0 2G 0 part
├─sda3 8:3 0 32G 0 part
└─sda4 8:4 0 93.7G 0 part
sr0 11:0 1 617.4M 0 rom /run/miso/bootmnt
EFI ($esp)
mkfs.fat -F 32 /dev/sda1
Swap
mkswap /dev/sda2
Root
mkfs.ext4 /dev/sda3
Home
mkfs.ext4 /dev/sda4
5. Mounting
Before we install the base system we need to mount the devices. First we mount the root system - using the folder /mnt for the temporary mount, then we make folders for /boot/efi and /home.
mount /dev/sda3 /mnt
mkdir -p /mnt/boot/efi
mkdir -p /mnt/home
Verify your folder structure
# find /mnt -type d
/mnt
/mnt/home
/mnt/boot
/mnt/boot/efi
Mount the efi and home partition
mount /dev/sda1 /mnt/boot/efi
mount /dev/sda4 /mnt/home
Verify your mounts
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 52.5M 1 loop /run/miso/sfs/livefs
loop0 7:1 0 501.3M 1 loop /run/miso/sfs/rootfs
sda 8:0 0 128G 0 disk
├─sda1 8:1 0 300M 0 part /mnt/boot/efi
├─sda2 8:2 0 2G 0 part
├─sda3 8:3 0 32G 0 part /mnt
└─sdc4 8:4 0 93.7G 0 part /mnt/home
sr0 11:0 1 617.4M 0 rom /run/miso/bootmnt
6. Base installation
When your folder structure and mounts are in place you install the base system into the new partitions.
To get a functional system you need
- The base meta package
- A kernel
- By release linuxXY
- Network
- Basic ethernet using dhcp
- For more advanced Network Manager
- Grub boot loader
- EFI boot manager
- Texteditor
- Any terminal based of your choice, to name a few nano, vi or micro.
- Sudo
The minimum required is the base meta package. But to actually run the install we need kernel, network, boot loader, efi boot manager, text editor and sudo.
Use basestrap command to install a base set of packages into the newly mounted root
Replace $LINUX with the kernel of choice e.g. linux515
basestrap /mnt base $LINUX dhcpcd networkmanager grub mkinitcpio efibootmgr vi nano sudo links
If you want to mimic the set of packages from the ISO currently live you will - in Section 9 - see how to make that happen.
7. Base configuration
Next thing is to configure the system in a chrooted environment. The tasks to be performed creating the necessary configurations for you new system. We will use bash as shell.
Using Nano editor press F2yEnter to save and exit.
manjaro-chroot /mnt /bin/bash
Console keyboard
Keyboard lists are found in /usr/share/kbd/keymaps.
Set console keyboard in /etc/vconsole.conf - example for Denmark
KEYMAP=dk
FONT=
FONT_MAP=
Locale
To generate the messages edit /etc/locale.gen and remove the comment for locale(s) to be generated (UTF-8 is the recommend choice).
Select locale
Example for a system in Denmark using english messages
...
#en_CA ISO-8859-1
en_DK.UTF-8 UTF-8
#en_DK ISO-8869-1
...
TIP: uncomment the locale en_US.UTF-8 UTF-8 as a fallback locale.
Generate the messages
locale-gen
locale.conf
Edit your locale configuration in /etc/locale.conf to match above choice - example for Denmark
LANG=en_DK.UTF8
Timezone
Set the time zone for location (the available zones is listed in /usr/share/zoneinfo/ using the Continent/Capitol format).
Symlink the time zone as /etc/localtime - example for Denmark
ln -sf /usr/share/zoneinfo/Europe/Copenhagen /etc/localtime
Clock
Linux clock runs using the timezone info and UTC time.
hwclock --systohc --utc
Hostname
Set hostname to manjaro
echo manjaro > /etc/hostname
Hosts configuration
nano /etc/hosts
127.0.0.1 localhost ::1 localhost 127.0.1.1 manjaro.localdomain manjaro
Note: If the system has a static IP replace 127.0.1.1 with the IP.
System administration
Allow members of the wheel group to perform administrative tasks.
Create a drop-in configuration in /etc/sudoers.d/10-wheel
with content
%wheel ALL=(ALL) ALL
For some advanced sudo-fu read this topic by @FadeMind
Network
Don’t enable both - not necessary and not a good idea.
Either enable basic ethernet using dhcpcd
systemctl enable dhcpcd
or Network Manager if you need e.g. wireless
systemctl enable NetworkManager
Time syncronization
Enable timesync daemon
systemctl enable systemd-timesyncd
Root password
Set a password the root user
passwd
8. Bootloader
Build the initramfs and install and setup grub
Initramfs
Build the initramfs
mkinitcpio -P
Bootloader
Generate grub for EFI system
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Manjaro
Generate grub configuration
grub-mkconfig -o /boot/grub/grub.cfg
9. Finalizing
Close chroot
exit
Recreate the live ISO edition
If for some reason your desire is to recreate the editon of the live Manjaro ISO you can easily do that by using the package lists found in root of the live system.
Whichever edition your live ISO is - you can recreate the experience using these files
- rootfs-pkgs.txt
- desktopfs-pkgs.txt
Sanitize the lists combining them into one list - then feed them to pacman to install them into your new root file system.
Start with root filesystem and pipe it into a new file
cat /rootfs-pkgs.txt | awk '{print $1;}' > ~/iso-pkglist.txt
Continue with the desktop filesystem and append it to the file
cat /desktopfs-pkgs.txt | awk '{print $1;}' >> ~/iso-pkglist.txt
Then feed the entire list to pacman and direct the installation to your mounted root using the convenient options of not confirming and only install if not already installed.
pacman -Syy --noconfirm --needed --root /mnt - < ~/iso-pkglist.txt
If you are doing some kind of system rescue operation leave out the --needed option
pacman -Syy --noconfirm --root /mnt - < ~/iso-pkglist.txt
Unmount the partitions
umount -R /mnt
Restart your system
Remember to remove your install media.
reboot
Login as root and test your internet connection
links manjaro.org
Final Considerations
If you opted to install the packages using the package lists on the ISO there is a few extra steps.
Administrative user
First create an administrative user - replace $USERNAME with an actual username
useradd --create-home --user-group -G network,scanner,lp,wheel $USERNAME
Then set a password for the user
passwd $USERNAME
Display manager
To enable a graphical login you must enable the display manager. Which one depends on the environment
- KDE
systemctl enable sddm
- Xfce
systemctl enable lightdm
- Gnome
systemctl enable gdm
Done
reboot
10. Variations
The choice to go down this path is usually due to preference and a desire to create a DIY Manjaro installation. The following is examples of how to continue.