This article serves for me to better learn Mediawiki and specific Arch Wiki practices. I also have a large collection of install notes that are getting unwieldy and transferring and combining them into a wiki article allows me to kill a couple birds at once.

Below are my installation notes that I created while following the Official Installation Guide as well as (selectively) the Beginners' Guide. I pulled in additional sources from off of both the above articles as well as many many others which I will reference throughout.

These notes assume a clean installation. I base the install on a system running a modern Intel CPU (Sandy or Ivy Bridge or later) as well as a modern NVIDIA GeForce GPU (600 series or later). I have used these notes on my home systems as well as a Virtual Private Server that I rent (RamNode).

I will make use of some arguably bleeding-edge, as well as some out of stream, technologies below. Btrfs will be used exclusively as will the Linux-ck kernel. I spent multiple days stubbornly wrestling with Btrfs to get it working and to get it configured correctly and absolutely adore it now.

I have completed a few Arch Linux installations prior to tackling Btrfs and running an out of stream kernel. With that said, if you have a technical knack, a willingness to learn, and the time to spend then I have no doubt that you could accomplish the same sort of installation as detailed below.

I will not be attempting to hold your hand throughout, this will be primarily notes that I need to repeat the installation without additional hassles. I intend to update the relevant Arch Wiki articles that I link to so that the needed information is accessible to those that need it (and to minimize work and redundant content).

Tip: If at any point below you do not understand exactly what a flag or command does. Check the relevant man page! Without understanding what you are doing, you waste a precious chance to learn more about your system and to better adjust it to your own needs!

Installation media

Pre-installation

Keyboard layout

If you are using a non-US or non-QWERTY keyboard layout set this now. For example:

# loadkeys dvorak
# loadkeys uk

Warning: If doing this install on a VPS or, in general over a VNC connection, verify whether your preferred keyboard layout is already working. If so do not load a different keyboard layout on the remote machine or it will transpose characters as the VNC server may be assuming a QWERTY layout on the client.

Set font

# setfont Lat2-Terminus16

See also

Partition disks

GPT fdisk

Warning: If there is any chance that the first few megabytes of your drive have ever had a file system formatted to them, then take the time to zero out this section (or the entire drive) before moving on. Grub will throw an error much, much later on in the install if there is a file system on this (or at least Btrfs) and you will have to roll the dice and zero out then and attempt to recover your MBR and GPT table at that point. I was successful in doing so, but better to be safe if given the option.
A quick way to zero out the first part of your drive is to run the following.

# badblocks -wv /dev/DRIVE 16384 0

After that you may want to go into gdisk, into the expert commands (x, and run zap (z)

First up we will load our (first) drive and partition it with gdisk. This will give the disk a GUID partition table and we will also set up an initial partition for Bios-booting grub on an UEFI system. In addition to this partition we will setup exactly one partition for use with Btrfs. Examples:

# gdisk /dev/sda
# gdisk /dev/vda
# gdisk /dev/mapper/array-name

Tip: If you are unsure of what drives you have available a few commands that might be helpful are:

lsblk

blkid

ls /dev/

See also

SSD alignment

Warning: If using a HDD skip this step

Note: Initially I used two SSDs in Btrfs Raid0 and searched far and long to verify the proper alignment. With no success on my particular drive (Samsung 830 128 GB) I settled on what seems to be the largest Wikipedia:lowest common denominator alignment of 3072 KiB (or 6000 sectors x 512 bytes, or 3,145,728 bytes). This should work for SSDs with NAND erase blocks of 1024 KiB, 1536 KiB, 2048 KiB (or less).
Ultimately, I am not yet convinced that partition alignment is fully necessary (see sources below) but to hedge my bet I am currently using it anyway as I do not mind sacrificing a little bit of disk space for the insurance policy.

By default gptfdisk (gdisk) aligns on 2048-sector boundaries (1 MiB) to change the alignment enter into the extra functionality (experts only) with x.

Partitioning the first disk

Grub system partition

First off, we need to create a partition so GRUB can run on a GPT disk with an (emulated) BIOS (assuming UEFI mainboard). On your first (or only) disk, n then Enter for default partition number of "1" then Enter for default starting partition alignment of 2048 (1 MiB), then +2M, then EF02.

Use P to print your current partition table to be written to your disk. This should start on sector 2048 and end on sector 6143. Everything else should match what we input above.

Brtfs partition

Next we need to create a partition to house the B-tree file system. Btrfs has its own support for sub-volumes so no additional partitions are needed (on this disk). For the Btrfs partition you can use all defaults while creating the partition in gdisk.

Boot flag

Before continuing on we will also need to set the bootflag on the first (or only) disk.
First, x for expert commands, then a to set an attribute on a partition, then 2 for the partition number of the Btrfs partition, and then 2 again for the legacy BIOS bootable option, and Enter to exit the attribute tool.

Warning: The Grub system partition (partition 1) will not be touched again for the rest of the install process. You can effectively forget that it exists. Do not use it for anything for the rest of the install!

Check your work with p again to verify everything looks correct, then w to write changes and exit GPT fdisk.
Confirm your work by running gdisk /dev/DISK -l.

Partition additional disks

If you have any additional disks that will be used for Btrfs partition them now by following the steps outlined above while adjusting as necessary.

As indicated above, for RAID 0 I maintain an even 1:1 ratio between the partitions to be used. For other RAID types this is not necessary.

Note: I have either been unable to document whether it is safe to use differently sized partitions for RAID 0 in Btrfs or I have read that it should not be done but have failed to document it. At least for the time being to err on the safe side I am sacrificing 2 MB at the front of my second disk. See [btrfs raid]

Format the partitions

Note: Originally I attempted to configure Btrfs with a sector size of 16 kb (-s 16384) but this caused issues when I went to mount it for me. I have retested with 16 kb and 8 kb with issues at mount time again. If you attempt to change the sector size and hit a wall when you go to mount dmesg | tail will tell you there was an incompatible sector size found), then try backtracking and allowing the sector size to be its default (do not use the -s flag).

Warning: Be sure to designate the partition(s) you intended for Btrfs. Not the full disk or the Grub system partition!

Connect to the Internet

Tip: The available network interface cards (NICs) can be found in /sys/class/net/ within you will likely see eth0 or wlan0 or both or neither. In those directories you can find information pertaining to any given NIC by using cat or nano.

Miscellaneous system configurations

Note: If you dual boot and Windows ever messes up your hwclock see here to reset your hwclock to UTC and here to configure Windows to work with a UTC hwclock.

Locale and languages

# nano /etc/locale.gen

# Configuration file for locale-gen
#
# lists of locales that are to be generated by the locale-gen command.
#
# Each line is of the form:
#
# <locale> <charset>
#
# where <locale> is one of the locales given in /usr/share/i18n/locales
# and <charset> is one of the character sets listed in /usr/share/i18n/charmaps
#
# Examples:
# en_US ISO-8859-1
# en_US.UTF-8 UTF-8
# de_DE ISO-8859-1
# de_DE@euro ISO-8859-15
#
# The locale-gen command will generate all the locales,
# placing them in /usr/lib/locale.
#
# A list of supported locales is included in this file.
# Uncomment the ones you need.
#
...
#en_PH ISO-8859-1
#en_SG.UTF-8 UTF-8
#en_SG ISO-8859-1
en_US.UTF-8 UTF-8
#en_US ISO-8859-1
#en_ZA.UTF-8 UTF-8
#en_ZA ISO-8859-1
...

KEYMAP=dvorak #Comment out if non-dvorak user or VPS/VNC.
FONT=Lat2-Terminus16
FONT_MAP=8859-2

mkinitcpio

# nano /etc/mkinitcpio.conf

Tip: List all hooks available with mkinitcpio -L.

In the hooks section move fsck before autodetect.

Note: If you changed your keyboard layout you will also need to add the keymap hook between the filesystems and keyboard ones.

Uncomment xz compression below and uncomment and set the compression options as -C sha256 -8e.

Warning: If you are installing on a VPS or other Xen virtual machine that uses or can use virtio drivers add "virtio virtio_blk virtio_pci virtio_net" to the MODULES section or your system may not boot!

Note: If you need to manually generate the initial ram environment in the future you can run

Next install linux-ck-ivybridge as well as the nvidia-ck-ivybridge drivers.

Tip: To determine which package set you should use run

$ gcc -c -Q -march=native --help=target | grep march

If you are using RamNode or another VPS you may need to request CPU/Host pass-through before you can use the best optimizations for the VPS. The VPS will need to be restarted from the control panel before the effects take place!

See also

Install and configure a bootloader

Note: Even if your system is x86_64 and you are running the 64 bit version of Arch Linux, you still need to use the i386 sections as indicated above for a grub on efi bios-emulated boot! I have been unable to find no documentation to the contrary and this has worked on two separate x86_64 based installs with no problems.

Warning: As noted in the partitioning section. If there is a file system in the space reserved for grub it will throw an error about "filesystem 'btrfs' doesn't support blocklists." If you see this, you likely need to go back and zero out your first partition and everything before it (don't touch the sectors of your second partition though! If you are lucky (and the software is awesome) you will be able to recover your MBR and repair btrfs (btrfsck --repair and continue on.

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="verbose add_efi_memmap elevator=bfq"
GRUB_CMDLINE_LINUX=""
# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
# Uncomment to enable Hidden Menu, and optionally hide the timeout count
#GRUB_HIDDEN_TIMEOUT=5
#GRUB_HIDDEN_TIMEOUT_QUIET=true
# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console
# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=auto
# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep
# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true
# Uncomment and set to the desired menu colors. Used by normal and wallpaper
# modes only. Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"
# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"
#GRUB_SAVEDEFAULT="true"

Tip: In the file below, you can create custom Grub entries, load modules, and essentially anything you might need to do. This allows you to effectively edit anything in grub without breaking the scripted generations that occur when you need to regenerate your grub.conf file.

# /etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
insmod btrfs

Now is it is time to see if your commands worked.

# grub-mkconfig -o /boot/grub/grub.cfg

Tip: You will need to run this same command anytime you make changes to your grub script files (as we have done above). You may wish to save this command somewhere or know how to easily find it here or elsewhere.

Check your grub file with # cat /boot/grub/grub.cfg | less. If you look closely, you will be able to spot the additions we made above in /etc/default/grub and /etc/grub.d/40_custom. You will also see similar (not the same) entries as your file-system table (fstab) file.

Tip: If you have made more than one mount point (for tmpfs, ramfs, or anything else) you can unmount them simultaneously so long as you do root by itself and last. umount /mnt/btrfs-system/{tmp,var/spool,var/log,home}
Cross your fingers and toes, and reboot!

Post-installation

Bring up internet

Temporary

# dhcpcd
# dhcpcd eth0
$ ping ramnode.com

Tip: The available network interface cards (NICs) can be found in /sys/class/net/ within you will likely see eth0 or wlan0 or both or neither. In those directories you can find information pertaining to any given NIC by using cat or nano.

Persistent server

Tip: I recommend setting up your own caching, local DNS server at some point that uses OpenDNS (or another alternative) as its forwarders.

# cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/ethernet0

Edit ethernet0 and uncomment IP6=stateless or IP6=dhcp for IPv6 networking.

# netctl enable ethernet0

Reboot to test.

Persistent desktop

You can use the same as the server section or NetworkManager depending on your preference.
For NetworkManager install networkmanagernetwork-manager-appletdhclient. See additional NetworkManager packages with pacman -Ss networkmanager.

# systemctl enable NetworkManager
# systemctl start NetworkManager

User management

Sudo

# sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##
...
##
## User privilege specification
##
root ALL=(ALL) ALL
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
...
## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

Find Uncomment to allow members of group wheel to execute any command

Uncomment it in.

Check your work with su -l USER then attempt to run something like pacman -Sy and pacman -Su with and without sudo to test and verify. I recommend rebooting logging in as your new user, testing that you can do everything you need to do with sudo before proceeding.

Tip: You can use sudo !! to repeat the previous command but with sudo in front of it.

Lockout root logins

Warning: This is not recommended, but I like to do it anyway for security.

See also

Setup

Congratulations, you have progressed beyond the official installation guides and onto much deeper waters. Your system should be up and running, the basic post-installation tasks should be completed and you are now ready to move on to more system specific system configurations.

Desktop

Sound

Note: If you have problems with sound consistently playing back, and recieve an error about invalid argument when attempting to playback in pianobar, you may need to edit your /etc/libao.conf file and remove the dev section and leave the driver as pulse. This may fail at first, but keep trying and check pauvcontrol.

Multiple monitors

Suggest not using twinview or Xinerama. May need to disable composting though. I configured through NVIDIA and then checked my work by editing the file. Save to home then # cp to /etc/X11/xorg.conf.d/10-monitor.conf.

Web browser

Configure

Disable Firefox's blocking of web-forgeries and attack sites. This feature slows down Firefox's start-up and shut-down and takes up space for the database it maintains. This feature also relies on Google services.

delete urlclassifier*.sqlite files in your profile

~/.mozilla/firefox/<PROFILE>/urlclassifier*.sqlite

While in your profile, in the terminal:

echo "" > urlclassifier*.sqlite
chmod 400 urlclassifier*.sqlite

Especially for SSDs it may prolong your drive's life to disable Firefox's disk cache.

about:config

Set browser.cache.disk.enable to false

Verify browse.cache.memory.enable is true

Set browser.cache.memory.max_entry_size to -1 for automatic memory usage

There is another similar memory flag that may also be set to -1 for automatic usage.

Xbmc

Pianobar

Aria2

Usenet tools

Install desired Usenet tools from AUR.

SABnzbd+

Tip: Make sure your /etc/make.conf file is configured to your preferences. You may be able to edit this file to increase the optimizations that are applied to any packages you build from source (such as AUR and ABS packages).

Harden server

General Guidelines

Keep installed packages to a minimum.

Update regularly.

Physical security

For a VPS, disable VNC once you have SSH setup. Configure it to boot from the hard drive by default. With a VPS you are essentially surrendering your ability to control the physical protection of your server. Make sure to choose a good provider!

Filesystem permissions

# chmod 700 /boot /root /etc/iptables

Prevent root login at console

/etc/securetty

Temporary lockout after failed login attempts

# nano /etc/pam.d/system-login

Limiting su to wheel group

# nano /etc/pam.d/su

Uncomment in the line following Uncomment the following line to require a user to be in the "wheel" group.

Launch Server

Modifications

Tip: Before moving on to modifications consider having a very solid server.cfg file and understanding SteamCMD's output when you launch your server!

SourceMod is our focus here. AMXmodx is another consideration, but sourcemod seems to be the more popular one and the better maintained one. SourceMod is technically a plugin for Metamod:Source. As such, this also needs to be installed.

Launch your server and see if meta list provides an output (or just meta).

For Sourcemod you essentially need to rinse and repeat. Get the download from here. Extract Sourcemod in the same folder as you did for Metamod. The archive will have the folder paths set relative to that same folder.

Begin to configure ~/.tf2/tf/cfg/sourcemod/sourcemod.cfg is a good place to start. See links below for more information.