Introduction
Although I have been using Gentoo Linux for several years, I
started to consider switching to other Linux distributions. The main
drawback of Gentoo is that too much time is spent on compiling. It is
really cool to build a cutting-edge system, however the time spent on
building it and maintaining it is enormous. Therefore I am searching a
minimalist's Linux distribution with binary packages. Arch Linux seems
to be quite good. I gave it a try under VirtualBox 4.0. The reference
I used was Beginner's
Guide.
Install the base system
The overall installation steps are quite similar to Gentoo: you
need to configure many things by hand. The difference is that the
installation is significantly faster.
If possible, one should select the fastest mirror since downloading
time is the most significant component of installing Arch Linux
packages. For me, I select the mirror listed here with the best
score for my location. After determining the mirror, you can download
the ISO image from that mirror, and add it to your
/etc/pacman.conf after installation. For example by adding
Server = http://mirror.url/archlinux/$repo/os/x86_64 under
the repo names, or uncomment preferred mirros in
/etc/pacman.d/mirrorlist (which is preferred). As an alternative, one may also
try reflector
after installing Arch Linux. Yet another option (I'm currently using)
is to rely on script rankmirrors (according
to here) to
select the fastest mirrors. Note that for rankmirrors option, file
/etc/pacman.conf needs one line Architecture =
x86_64.
To enable the compatibility with 32-bit legacy programs (like
Android emulator), multilib should be enabled in pacman.conf as
below:
[multilib]
Include = /etc/pacman.d/mirrorlist
Simply download the latest ISO image. I used "core" image since it
contains all the base packages for installation. The latest version as
writing is archlinux-2011.08.19-core-x86_64.iso. Download and
mount it under VirtualBox. Then boot the virtual machine.
For help, open a virtual terminal (by
typing Alt+F2) and type less
/arch/beginnersguide.txt
The installation steps are as follows:
- Login as root.
- Type /arch/setup to start the installer.
- Select the source as "core-local".
- Select Editor according to your taste.
- Set the clock by selecting region and timezone according to your
location. You should know whether your hardware clock is UTC or local
(my settings in VirtualBox is UTC). The recommended setting is
UTC.
- For "Prepare Hard Drive(s)", firslty I choose "Manually Partition
Hard Drives" and then "Manually Configure block devices, file
systems and mount points.". I only setup two partitions, /boot
partition (200 MB, ext2), and root partition (remaining disk,
ext4.)".
For menu "Partition Access Method", select "uuid".
- After completing partitioning, go back to main menu and select
"Select Packages. For bootloaders, choose "grub". Then for package,
select "base-devel" meta-package as well, and select following
packages in addition: gpm, inetutils, linux-header, mlocate, ncurses,
openssh, pacman-mirrorlist, readline, sqlite3, sqlite3-doc, sudo,
xinetd.
- Select "Install Packages" from main menu. Select "Yes" to
keep packages in pacman cache.
- Select "Configure the System" from main menu.
- Modify /etc/rc.conf. Change "foo" to your desired host name.
interface=eth0
I also removed netfs from DAEMONS line.
- Write your desired host name to /etc/hostname.
- Modify /etc/fstab by adding options noatime and nodiratime to
partition /.
- Modify /etc/locale.gen by uncommenting the lines starting as
"zh_CN" since I'm a Chinese.
- Modify /etc/pacman.conf by uncommenting the Xfercommand line in
/etc/pacman.conf for wget.
- Modify /etc/pacman.d/mirrorlist by uncomment your preferred
mirrors as discussed above.
- Change root password.
- Back to main menu, select "Install Boot loader". Add option
"vga=0x360" for customed VESA mode provided by VirtualBox (as
discussed below). Install the bootloader to master boot record (sda in
my case).
- Finally, select "Exit Install" and type reboot to turn
on the new system.
Configuration and Graphics User Interface
This section documents further installation and customization I
made.
VirtualBox related settings
Install custom VESA mode to support your PC/Laptop's screen
resolution according to VirtualBox manual, if necessary.
Install VirtualBox guest additions as shown below (note that we
need to install kernel headers first to compile the additions). Reboot
is needed to make additions work. Note that if you want to install
Xorg, you can run VBoxLinuxAdditions.run after completing pacman
-S xorg. Optionally package xorg-xinit can be
installed for script startx and
package rxvt-unicode for a nice terminal.
# mkdir /mnt/cdrom
# mount -t iso9660 /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom
# ./VBoxLinuxAdditions.run
# reboot
Proxy: for proxy, add export http_proxy=proxy.url to .bashrc of
root. If subversion was later installed, oen need to modifiy
~/.subversion/servers for lines containing http-proxy-host and
http-proxy-port. When using sudo to update pacman, one need to add the
following line after typing visudo: Defaults env_keep +=
"http_proxy https_proxy".
To share folders between host and Linux guest, one need to first
setup the sharing in VirtualBox GUI. Then after installing Guest
Additions as discussed above, the sharing can be enabled like below
(assuming the shared folder name is bar and you want to mount it in
your Linux guest directory /mnt/bar):
# mkdir /mnt/bar
# mount -t vboxsf bar /mnt/bar
Add additional user
# useradd -m -G audio,optical,storage,video,wheel foo
# passwd foo
Change foo to your desired name.
Run visudo to edit file /etc/sudoers. Uncomment the 1st
line containing wheel to enable running root commands from wheel
group. One may add lines like Defaults env_keep +=
"http_proxy" to pass environment variables.
Handling of security
Ru nthe following command: cp /etc/pacman.conf.pacnew
/etc/pacman.conf. Apply all previously mentioned changes to
/etc/pacman.conf to the overwrittine file. Then uncomment
following line:
SigLevel = Optional TrustAll
Run pacman-key --init to initialize keyrings.
Cleanup unused packages
Since some packages are not useful to me, I remove them to avoid
future waste of time and bandwidth to update them. Note that you may
use pacman -Qe to list the explicitly installed
packages. Warning: please make sure you do understand
what you're doing: removing important system packages may break your
system. As shown below, I only remove those packages related to file
systems I'm not using.
# pacman -Rsn jfsutils reiserfsprogs xfsprogs
ABS
Run the following command:
# pacman -S abs
Edit /etc/abs.conf, For REPOS line, add ! before testing.
AUR helper
There are lots of AUR
helpers, and I chose pacaur after trying
various helpers (e.g. pacaur support proxy seamlessly pacman). To
install pacaur, one needs to first install yajl and expac using
pacman, then install cower and pacaur by running the following
command.
$ sudo pacman -S yajl
$ wget http://aur.archlinux.org/packages/co/cower/PKGBUILD ; makepkg -si
$ wget http://aur.archlinux.org/packages/pa/pacaur/PKGBUILD ; makepkg -si
To install packages from AUR, simply run pacaur -S
pkg.
SSHD
If one want to run SSHD server, one need to add sshd to DAEMON line
of /etc/rc.conf. One may modify /etc/hosts.allow and/or
/etc/hosts.deny. Default is that all connections are denied.
Xorg
Install Xorg by simply running pacman -S xorg. Accept
the default (although there are many drivers not needed). Afterward,
one need to install VirtualBox Guest Addition for video drivers, as
discussed above.
Generally, there is no need to modify /etc/X11/xorg.conf since
VirtualBox can handle the file for you when installing Guest
additions. There is no need to specify screen resolutions since
VirtualBox can seamless adjust it according to host
resolution. However, if one wants to restrict available resolutions
(e.g. to use StumpWM which is not compatible with VirtualBox's
seamleass operation), one can add the following line in Section
Screen, Subsection Display. Below example sets up two resolutions with
60 Hz refresh rate.
Modes "1680x1050_60.00" "1440x900_60.00"
One may install package mesa-demos to benchmark OpenGL
performance with glxgears.
For better font rendering, one may install
freetype2-infinality, fontconfig-infinality,
ttf-google-webfonts, and libxft-lcd from AUR.
GNOME
Install GNOME by typing the command pacman -S gnome. Then
add dbus to DAEMONS array in /etc/rc.conf.
Add the following line to ~/.xinitrc:
sh
[ -f /etc/xprofile ] && . /etc/profile
[ -f ~/.xprofile ] && . ~/.xprofile
exec gnome-session
For VirtualBox, type the following to use GNOME 3:
# ln -s /usr/lib/xorg/modules/dri/vboxvideo_dri.so /usr/lib/dri
# pacman -S libltdl # Such reinstallation is needed.
$ gnome-shell --replace
To start GNOME, simply type startx.
I installed following packages in addition:
- gconf-editor
- - Edit GNOME settings
- gnome-system-tools
- - contains GNOME admin tools
- gksu
- - allows normal user to use system tools
- gamin
- - allows changes to files and directories to be
detected immediately.
- gnome-media-pulse
- - enables volume control as tray notification
- faenza-icon-theme
- - cool icon theme
- baobab
- - disk usage
To select fonts suitable for LCD display, right click mouse on
desktop, then select Change Desktop Background -> Font,
select "Subpixel smoothing (LCDs)" for Rendering.
Update (2011-05-03): I installed login manager
GDM by typing pacman -S gdm, and perform following
changes to /etc/inittab:
- comment line id:3:initdefault:
- uncomment line id:5:initdefault:
- comment line x:5:respawn:/usr/bin/xdm -nodaemon
- uncomment line x:5:respawn:/usr/sbin/gdm -nodaemon
Audio
In VirtualBox settings for Audio Controller, I select Intel HD
Audio. The sound car can be automatically detected by udev. So what
needs to be done is to unmute some channels and let alsa store and
restore mixer settings.
# pacman -S alsa-utils
# amixer set Master 90% unmute
# amixer set PCM 85% unmute
# aplay /usr/share/sounds/alsa/Front_Center.wav
# alsactl -f /var/lib/alsa/asound.state store
Finally, edit /etc/rc.conf and add "alsa" to DAEMONS array to store
on shutdown and restore mixer settings on boot.
Customization and Applications
Note: this part is quite personal. The purpose I
wrote it is mainly for documenting the steps so I myself may use it
later.
Applications
Following is a list of applications installed by category. Some
packages are only available from AUR and are marked by suffix [A].
- Development tools: gdb, strace, cmake, valgrind,
gprof2dot-git[A], bochs, qemu, mmixware [A], ghc, cabal-install,
sbcl, racket, fluxus-git[A], squeak-vm[A], squeak-image[A], ruby,
python, ipython, ipython2, pylint, pychecker, pyflakes, pep8[A],
scipy, python2-pybrain [A], python2-nltk, wxpython, python-httplib2,
python-pygame, ropemacs[A], matplotlib, libgnomeui, python2-pandas, django,
nginx, gunicorn[A], postgresql, python2-psycopg2, auto-complete[A],
jdk7-openjdk, visualvm[A], eclipse, eclipse-findbugs[A], android-sdk[A],
android-ndk[A], android-sdk-platform-tools[A], emacs-android-git[A],
scala, scala-docs, scala-sources, sbt, r, emacs-ess-svn[A], nasm, clojure,
subversion, rapidsvn, ctags, git, perl-term-readkey, tig, tk,
perl-libwww, mercurial, darcs[A], xmlstarlet, cconv[A],
emacs-markdown-mode-git[A]
- Documentation: texlive-most, pdftk[A], aspell-en, multimarkdown-git
- Font: ttf-dejavu, ttf-inconsolata, terminus-font,
wqy-bitmapfont, wqy-zenhei, wqy-microhei[A], ttf-arphic-uming,
ttf-ms-fonts[A], ttf-vista-fonts[A], ttf-ms-fonts-zh_cn[A]
- Multimedia: mplayer, mencoder, ffmpeg, codecs, cdparanoia, lame,
cuetools, flac, shntool, wavpack, mac, mp3info, vorbis-tools
- Web: lynx, chromium, flashplugin-prerelease, w3m, curl, amule
- Utilities: gnupg, unzip, zip, p7zip
- Graphics: gnuplot, inkscape, processing, graphviz, gimp, blender, imagemagick, darktable
- Reader: djview4 , evince, kchmviewer, fbreader, calibre,
pdf2djvu, catdoc, tesseract, tesseract-data-eng
- Network: whois, nfs-utils, xinetd
- Mathematics: maxima
- Education: timidity++, solfege
- X: xscreensaver
- Fun: povray
- Libraries: gsl, atlas-lapack[A], libmtp
- Science: pymol, biopython, stellarium, celestia
Chinese Input
I install ibus as below:
# pacman -S ibus ibus-pinyin
Then add the following lines into ~/.xprofile:
export XMODIFIERS=@im=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
ibus-daemon -d -x
Update (2011-01-06): switch from SCIM to ibus.
Emacs
For Emacs package management, el-get is interesting to try. The
installation method is very unique and there is no need for an
ArchLinux package.
Install scala-mode as below:
$ cd ~/.emacs.d/plugins
$ svn co http://lampsvn.epfl.ch/svn-repos/scala/scala-tool-support/trunk/src/emacs/ scala-mode
Get anything.el by wget http://www.emacswiki.org/emacs/download/anything.el.
Install following packages: auctex, slime-cvs, emacs-w3m-cvs, pymacs.
Install clojure related modes.
$ cd ~/.emacs.d/plugins
$ git clone https://github.com/technomancy/clojure-mode.git clojure-mode
$ git clone https://github.com/technomancy/swank-clojure.git
$ mkdir ~/.swank-clojure
$ cd ~/.swank-clojure
## Get three jars in https://github.com/technomancy/swank-clojure/blog/master/swank-clojure.el manually.
Install Hyperspec for Common Lisp
Run the following commands:
# wget ftp://ftp.lispworks.com/pub/software_tools/reference/HyperSpec-7-0.tar.gz
# tar xzvf HyperSpec-7-0.tar.gz
# mkdir /usr/share/doc/hyperspec
# mv HyperSpec !$
Stumpwm
First invoke sbcl, then type the following into
REPL. Note that ASDF install is used other than AUR. Note that
installation of trivial-gray-streams, flexi-streams, and cl-unicode
might not be needed.
(require 'asdf)
(require 'asdf-install)
(asdf-install:install "http://common-lisp.net/project/cl-plus-ssl/download/trivial-gray-streams.tar.gz")
(asdf-install:install "http://weitz.de/files/flexi-streams.tar.gz")
(asdf-install:install "http://weitz.de/files/cl-unicode.tar.gz")
(asdf-install:install 'clx)
(asdf-install:install 'cl-ppcre)
When prompted by "Install where", it is recommended to select
"Personal Installation" since it does not require root privilege. Note
that some packages do not have GPG signature, so if SBCL drops you
into debugger, simply select skip GPG check. If SBCL complaints and
exited (due to in --disable-debugger mode), type the following after
enter sbcl (sb-ext:enable-debugger) or add it to
/etc/sbclrc as system initialize file for SBCL.
After installation of the dependencies, quit SBCL by type
(sb-ext:quit) and run the following at CLI:
$ git clone http://git.sv.gnu.org/r/stumpwm.git stumpwm
$ cd stumpwm
$ ./autogen.sh
$ ./configure
$ make
After copy stumpwm to a directory in PATH, one can add "exec
stumpwm" at the end of ~/.xinitrc. Then typing startx will
bring up Stumpwm. Since I installed both GNOME and StumpWM, I decides
to write two scrips to automate the changes to .~/.xinitrc. With these
scripts, I can type startg for GNOME or starts
for StumpWM.
Contents of script startg:
envsed -e 's/exec.*$/exec gnome-session/' -i ~/.xinitrc
startx
Contents of script starts:
envecho "exec stumpwm" > ~/.xinitrc
startx
Miscellaneous
For root, add one line in ~/.bash_profile to enable .bashrc
. $HOME/.bashrc
To run indexing daily, run crontab -e to add the
following line (Update (2010-12-28): this step is not
needed since updatedb is already added in /etc/cron.daily during
installation of mlocate):
11 11 * * * updatedb
To keep boot messages on tty1 instead of clearing screen, add
option for tty1 in /etc/inittab like below:
c1:2345:respawn:/sbin/agetty -i -8 38400 tty1 linux
Conclusion
After using Arch Linux for a long time, I have to say that I'm
extremely satisfied. Your system may not be extremely fast as Gentoo
boxes, but what you gain is significant: invaluable time.