Install Manjaro using CLI only
This is how you install Manjaro using the terminal. The guide can also be used to install an Arch Linux - just substitute the arch equivalent (linux or linux-lts, pacstrap and arch-chroot)
- On bare-metal use CtrlAltF4
- On VirtualBox use RightCtrlF4
This guide is intended as a reference for basics abstracted by the Architect framework (Steps not guaranteed to be the same order). The guide can be applied as a virtual machine or hardware.
- VirtualBox or Hardware
- Installation prerquisites
- Base installation
- Base configuration
- Time sync
- Root password
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 CPU
- 2 GB memory
- 32 GB disk (this guide uses 128G disk)
- Enable EFI
- Graphics 128MB
If you want to boot a system I recommend using the ventoy project to initialize an USB - then do a one-to-one copy of the ISO to USB. The package is available from AUR and the official repo.
sudo pacman -Syu ventoy
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.
- 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.
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://manjaro.moson.eu
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
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 20-32G is more than adequate.
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)
- root - 32G
- 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.
- Select Free space → New → Enter.
- Enter size 2G → Enter.
- Select Type → Enter.
- Select Linux swap → Enter.
- Select Free space → New &rarr Enter.
- Enter size 32G → Enter
- Select Type → Enter.
- Select Linux root (x86_64) → Enter.
- 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
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
# mkfs.fat -F 32 /dev/sda1
# mkswap /dev/sda2
# mkfs.ext4 /dev/sda3
# mkfs.ext4 /dev/sda4
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 linuxYY
- Latest linux-latest
- LTS linux-lts
- Basic ethernet using dhcp
- For more advanced Network Manager
- Grub boot loader
- EFI boot manager
- Any terminal based of your choice, to name a few nano, vi or micro.
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.
# basestrap /mnt base $LINUX dhcpcd networkmanager grub mkinitcpio efibootmgr vi nano sudo links
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
Keyboard lists are found in /usr/share/kbd/keymaps.
Set console keyboard in /etc/vconsole.conf - example for Denmark
KEYMAP=dk FONT= FONT_MAP=
To generate the messages edit /etc/locale.gen and remove the comment for locale(s) to be generated (UTF-8 is the recommend choice).
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
Edit your locale configuration in /etc/locale.conf to match above choice - example for Denmark
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
Linux clock runs using the timezone info and UTC time.
# hwclock --systohc --utc
# echo manjaro > /etc/hostname
# 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.
Allow members of the wheel group to perform administrative tasks.
Locate the line reading # %wheel ALL=(ALL) ALL and remove the # in the beginning of the line
%wheel ALL=(ALL) ALL
And press EscShiftzz
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
Enable timesync daemon
# systemctl enable systemd-timesyncd
Set a password the root user
Build the initramfs and install and setup grub
Build the initramfs according to your chosen kernel e.g. linuxYY
# mkinitcpio -p linuxYY
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
Unmount the partitions
# umount -R /mnt
Restart your system
Remember to remove your install media.
Login as root and test your internet connection
$ links manjaro.org